Ci sarà capitato sicuramente, maneggiando un dispositivo iOS come un iPhone o un iPad, di imbatterci nelle alert view. Le alert view sono quelle finestre che appaiono con una piccola animazione e ci notificano qualcosa: generalemnte un errore o l’impossibilità di fare qualcosa. Per esempio se proviamo ad utilizzare Safari con la wi-fi spenta e senza l’uso della rete 3G apparirà una alert view che ci notifica l’impossibilità di accedere alla Rete. Dato che le alert view sono molto comode per mostrare agli utenti dei messaggi, diciamo di servizio, è opportuno illustrare al lettore il loro utilizzo.
Anche l’alert view fa parte dell’UIKit utilizzeremo, quindi, la classe UIAlertView. Andiamo dunque a creare un nuovo progetto Xcode scegliendo come template sempre View-based application e andiamo ad aprire il file di implementazione del ViewController posizionandoci nel metodo viewDidLoad nel quale scriveremo il seguente codice:
UIAlertView *alert;
alert = [[UIAlertView alloc] initWithTitle:@"MRWebMaster"
message:@"Alert View di MRWebMaster"
delegate:nil cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
La dichiarazione della alert viene eseguita in maniera standard. Come possiamo vedere ci viene offerto un metodo di inizializzazione molto ricco di parametri che servono per personalizzare il contenuto della alert. Se per esempio inseriamo il valore nil come valore per il parametro cancelButtonTitle di fatto il tasto non apparirà nella alert, ma sarà presente un’unico bottone con scritto OK (creato mettendo la stringa OK nel metodo otherButtonTitles). Infine il metodo show mostra a video la alert.
Come possiamo notare una volta lanciata l’applicazione, se clicchiamo su uno dei due tasti avremo come effetto la chiusura della alert e niente più. Sarebbe opportuno, prima di tutto, associare un comportamento all’applicazione in seguito al click sui bottoni della alert, ma anche differenziare il comportamento a seconda se venga cliccato il tasto cancel oppure il tasto OK.Per poter fare ciò è necessario collegare alla alert il suo delegato utilizzando il protocollo UIAlertViewDelegate. Creiamo un nuovo file di tipo Objective-C class e inseriamo il seguente codice nel file di intestazione:
@interface DelegatoAlert : NSObject <UIAlertViewDelegate>{
}
- (void)alertView:(UIAlertView *)alertView
willDismissWithButtonIndex:(NSInteger)buttonIndex;
@end
Come potete notare, dopo la dichiarazione di ereditarietà dalla classe NSObject, abbiamo aggiunto <UIAlertViewDelegate> che sostanzialmente indica al compilatore che la classe che abbiamo creato è un delegato per una alert view. Il metodo, per il quale abbiamo dichiarato il prototipo, è un metodo che ci viene offerto quando inseriamo <UIAlertViewDelegate> come protocollo (se si vuole approfondire l’argomento si consiglia di leggere la documentazione della Apple) che sarà il metodo che catturerà la pressione dei tasti nella alert view.
Spostiamoci adesso nel file di implementazione ed inseriamo il seguente codice:
- (void)alertView:(UIAlertView *)alertView
willDismissWithButtonIndex:(NSInteger)buttonIndex{
if(buttonIndex == 0){
NSLog(@"Abbiamo premuto il bottone: Cancel");
}
else if (buttonIndex == 1){
NSLog(@"Abbiamo premuto il bottone: OK");
}
}
Come possiamo vedere il differente comportamento da seguire, a seconda del bottone premuto ,viene realizzato con un semplice if che controlla l’indice del bottone. Il valore dell’indice si incrementa di una unità ogni volta che si crea un nuovo bottone e quindi l’indice per il bottone cancel (il primo creato) avrà valore 0 mentre l’indice del bottone OK (il secondo creato) avrà il valore 1 (se aggungissimo un terzo bottone questo avrà come indice 2 e così via). Si possono aggiungere tutti i bottoni che desideriamo alla alert e per far ciò basta utilizzare la seguente linea di codice:
[NomeDellaAlert addButtonWithTitle:@"titolo del bottone"];