Nel capitolo precedente abbiamo visto come creare un delegato per una UIAlertView adesso, l’ultima operazione che ci resta da compiere, consiste nell’associare alla alert quel delegato al momento dell’istanziazione. Andiamo dunque nel file di implementazione del ViewController e inseriamo il seguente codice al posto di quello vecchio:
UIAlertView *alert;
DelegatoAlert *_delegato = [[DelegatoALert alloc]init];
alert = [[UIAlertView alloc] initWithTitle:@"MRWebMaster"
message:@"Alert View di MRWebMaster" delegate:_delegato
cancelButtonTitle:@"Cancel" otherButtonTitles:@"OK", nil];
[alert show];
[alert release];
Come possiamo vedere, dopo la dichiarazione della alert, viene creata un’istanza di DelegatoAlert per dar vita all’oggetto che poi andremo ad utilizzare. A questo punto allochiamo ed inizializziamo l’alert inserendo, questa volta, come parametro di delegate: l’istanza della classe DelegatoAlert. Adesso siamo pronti a vedere il risultato dei nostri sforzi. Dato che, l’output della pressione del bottone sarà una scrittura su console con l’utilizzo di NSLog(), andiamo in Xcode e dal menù run clicchiamo su console. Dalla console lanciamo l’applicazione e vedremo stampe diverse stringhe per i due bottoni.
Nel nostro esempio abbiamo optato per un output semplicissimo, nulla vieta di ampliare questa struttura di base per far compiere all’applicazioni diverse operazioni ogni volta che il bottone viene premuto.
Come detto la UIALertView è uno strumento molto potente e di impatto grafico notevole che può essere utilizzato modificando la struttura stessa della UIALertView effettuando così una customizzazione della alert stessa. Andremo dunque a modificare la alert facendola apparire come un’immagine che scompare, automaticamente, dopo un lasso di tempo prefissato. Un esempio di quanto detto potrebbe essere inserito nel contesto di un gioco mostrando all’utente delle immagini o avvisi che si chiudono automaticamente quando l’utente compie qualche particolare azione.
Prima di tutto modifichiamo il codice scritto precedentemente con il seguente:
alert = [[UIAlertView alloc] initWithTitle:nil
message:nil delegate:_delegato cancelButtonTitle:nil
otherButtonTitles:nil, nil];
UIImage *img = [ UIImage imageNamed: @"Paesaggi05.png" ];
UIImageView * immagine;
immagine = [ [ UIImageView alloc ] initWithImage: img ];
[alert show];
[alert addSubview:immagine];
[alert release];
Como possiamo vedere abbiamo messo il valore nil a quasi tutti i parametri del metodo di inizializzazione della alert e poi abbiamo creato un’immagine con a solita sintassi. Utilizziamo poi il metodo addSubView per mostrare a video l’immagine. In questo modo viene dato all’immagine un’animazione molto gradevole.
A questo punto non ci resta che far scomparire la alert dopo un determinato lasso di tempo. Per far ciò, spostiamo la dichiarazione della alert, dichiarandola come attributo della classe nel file di header del ViewController. Creiamo inoltre le property e inseriamo il synthesize nel file di implementazione. Il resto del codice rimane immutato, bisogna solamente aggiungere una linea di codice dopo il metodo show della alert:
[self performSelector:@selector(hideAlert) withObject:nil afterDelay:4.0];
Utiliziamo il costrutto performSelector:@selector che in sostanza ci permette di richiamare il metodo all’interno della parentesi. Il metodo verrà invocato dopo un lasso di tempo indicato nel parametro (espresso in secondi) afterDelay. Ora non ci resta che creare un metodo hideAlert nella quale è sufficiente inserire la seguente linea di codice che di fatto rimuove la alert dalla vista:
[alert removeFromSuperview];