Ogni buon programma dovrebbe intercettare eventuali errori che si manifestano durante l’uso del programma, dovuti all’azione degli utenti o per qualunque altra causa esterna, e mostrare sul display un messaggio che li aiuti a correggere le scelte errate o comunque a capire cosa sta accadendo e perchè l’applicazione ha smesso di funzionare. Potreste inoltre aver bisogno per un qualsiasi altro motivo di attirare semplicemente l’attenzione dell’utente. Per tutto questo viene in nostro aiuto l’oggetto UIAlertView.
Le basi
L’utilizzo di una alert view a livelli basilari non presenta difficoltà. Il seguente codice, ad esempio, farà apparire un semplice avviso contenente un titolo, un messaggio e un bottone “OK” per la chiusura dello stesso:
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Alert View Title" message:@"Alert View Text" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
[alertView show];
[alertView release];
Analiziamo insieme il codice:
UIAlertView * alertView = [[UIAlertView alloc] initWithTitle:@"Alert View Title" message:@"Alert View Text" delegate:nil cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
Questa riga di codice inizializza il nostro alert.
Title e message sono rispettivamente il titolo ed il messaggio dell’alert; essi si distinguono inoltre per lo spessore del carattere: il primo è in grassetto mentre il secondo no.
Delegate è il delegato dell’alert. In questo caso il suo attributo è nullo, ma nella fase successiva della guida non lo sarà più.
CancelButtonTitle è il titolo del bottone che in genere viene usato per cancellare un’azione ed è espresso con una NSString. Nel nostro esempio abbiamo deciso di non metterlo poiché non vi era il bisogno di cancellare nulla.
OtherButtonTitles sono i titoli di tutti i restanti bottoni che vogliamo mettere. L’attributo è composto da una serie di NSString (ricordatevi di chiuderla con nil!).
Alla pressione di un bottone l’avviso scomparirà automaticamente.
[alertView show];
Questa istruzione serve a mostrare l’alert con la sua relativa animazione, penso che non vi sia da aggiungere altro.
[alertView release];
Avendo prima allocato l’oggetto è importante rilasciarlo!
Interagire con l’utente
Vediamo ora come possiamo effettuare certe azioni in base alla risposta dell’utente ad un avviso.
Vogliamo far sì che alla pressione del bottone “OK” venga mostrato in console un messaggio, mentre alla pressione del pulsante “Cancel” non venga mostrato nulla.
Per “captare” la risposta dell’utente all’avviso abbiamo bisogno di implementare il protocollo UIAlertViewDelegate nella classe del nostro documento (generalmente il file di intestazione .h).
@interface MiaSottoclasse : NSObject {
}
Il nome della sottoclasse e della classe varierà ovviamente a seconda del progetto.
Come possiamo osservare anche nella documentazione Apple il protocollo ci offre nuovi metodi con i quali essere notificati.
Prendiamo in considerazione questo:
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex
Il metodo relativo al tasto premuto viene chiamato quando una Alert View si accinge a sparire. Nei suoi attributi troviamo infatti l’index, (l’identificativo) del bottone premuto. L’index va da 0, per il primo tasto in ordine di apparizione, a salire.
Inizializiamo il nostro avviso come visto in precedenza, questa volta specificando come delegato self, ovvero la propria classe e mettendo come attributo in cancelButtonTitle: @”Cancel”.
Modifichiamo ora il nostro metodo:
- (void)alertView:(UIAlertView *)alertView willDismissWithButtonIndex:(NSInteger)buttonIndex{
if(buttonIndex == 0){
// È stato premuto il bottone Cancel
} else if (buttonIndex == 1){
//È stato premuto il bottone OK
NSLog(@"Bottone premuto: OK!");
}
}
Nella nostra modifica è stato semplicemente aggiunto un ciclo if e un NSLog che mostra il messaggio in Console.
Customizzare una Alert View
Le Alert View non vengono solo utilizzate per comunicare errori o per messaggi o conferme agli utenti delle nostre applicazioni, possono essere infatti impiegate anche per mostrare altre informazioni. Ad esempio, potremmo usare un’AlertView personalizzata per mostrare il caricamento di un’altra vista, ovviamente però potremo farlo grazie ad alcune piccole modifiche. Ricordate infatti che una Alert View, è di fatti un UIView, (da cui eredita proprietà e metodi), e essendo tale, è in gran parte modificabile.
In questa parte della nostra guida vogliamo integrare in essa un indicatore di caricamento (UIActivityIndicatorView).
Per prima cosa inizializiamo la nostra “rotellina” e facciamola partire:
UIActivityIndicatorView * activityView = [[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhiteLarge];
//La posizione dell'indicatore varia dal testo dell'alert
activityView.frame = CGRectMake(121.0f, 50.0f, 37.0f, 37.0f);
[activityView startAnimating];
Ora aggiungiamola al nostro alert e rilasciamola:
alertView3 = [[UIAlertView alloc] initWithTitle:@"Loading" message:nil delegate:nil cancelButtonTitle:nil otherButtonTitles:nil];
//Aggiungo l'indicatore come una subview
[alertView3 addSubview:activityView];
[activityView release];
[alertView3 show];
Quando proverete l’avviso noterete che non avrete alcun bottone per dimetterlo; sarete infatti voi a farlo via codice quando avrete finito di caricare tramite questa semplice istruzione:
[alertView3 dismissWithClickedButtonIndex:0 animated:YES];
Ogni alert è completamente customizzabile, potete infatti aggiungervi Text Fields, Sliders e quello che più preferite. Tenete comunque presente che il motivo per cui sono nati gli alert è esclusivamente quello di richiedere l’attenzione dell’utente!
Nel caso abbiate problemi nel seguire il codice della guida o vogliate per semplice curiosità scaricare il progetto contenente tutti gli esempi lo potete fare da qui.
7 Responses to “UIAlertView – Guida completa all’uso”
31 Marzo 2010
Mircobel tutorial davvero. soprattutto la parte della customizzazione è molto utile
grazie
31 Marzo 2010
Luca AulettaRagazzi potete fare un tutorial sull’utilizzo dei picker? Sto preparando un app che esegue un particolare calcolo… e mi servirebbe un picker per far selezionare un valore all’utente… E mi sto scervellando!!!!
Comunque Grandissimo sito!!!!!!!
31 Marzo 2010
Staff devAPPSicuro, per comodità posta la richiesta nell’apposita sezione del forum.. ci servirà da promemoria.. ma stai tranquillo che arriva.. ci stiamo organizzando a dovere per rispondere a tutti 😉
31 Marzo 2010
Luca AulettaFatto!!!! ed ancora complimenti
7 Agosto 2010
CostantinoCiao.
innanzitutto complimenti per il tutorial (ed il sito in generale). Ho un problema con l’utilizzo della pop-up, e spero che possiate aiutarmi a risolverlo. In una procedura leggo un valore di tipo NSString da un database. Questo valore deve essere visualizzato nella pop-up quando premo su un bottone (in definitiva, il valore è una nota per l’utente che viene visualizzata quando premo un bottone presente su una textview). Ora, La visualizzazione della pop-up si trova nella procedura che viene richiamata alla pressione del bottone, mentre il campo letto dal db si trova in un’altra procedura. Come faccio a passare questo valore come parametro “message” della UIAlertView?
Ciao
Costantino
20 Gennaio 2011
armandociao,
perche l’alert a volte compare e a volte compare in ritardo??????
il mio metodo:
– visualizza l’alert
– fa una chiamata http
-elimina l’alert
ma l’alert viene visualizzato solo una volta terminata la chiamata e per lo piu per mezzo secondo !!!! grazie anticipatamente
20 Gennaio 2011
Guido Lodetti@armando: Ciao! Sovresti visualizzare l’alert, inizializzare una NSOperation o un nuovo NSThread e, una volta conclusa l’operazione, chiamare sul main thread il metodo per dimettere l’alert.
Guido