Con il rilascio dell'SDK iOS 5, la classe UIAlertView è stata aggiornata per supportare in modo nativo l'input di testo, l'immissione di testo protetto e i campi del modulo nome utente / password. Questo suggerimento rapido dimostrerà come sfruttare questi nuovi miglioramenti!
In un precedente tutorial completo per principianti, ho guidato il lettore attraverso la creazione di un progetto con un pulsante e uno sfondo personalizzati. Userò il progetto creato in quel tutorial come punto di partenza per questo.
Gli elementi di layout e forma di a UIAlertView
ora può essere facilmente e rapidamente controllato impostando il alertViewStyle
proprietà. Le opzioni possibili per questa proprietà includono:
Questo stile aggiungerà un singolo campo di testo alla visualizzazione degli avvisi:
Questo stile è simile al campo di testo normale, tranne per il fatto che tutti i caratteri inseriti saranno oscurati:
L'impostazione di questo valore per la proprietà dello stile aggiungerà sia un input di campo di testo normale per un nome utente sia un input di campo di testo protetto per una password:
Questo è lo stile predefinito che tutti già conosciamo e amiamo:
Tutti gli stili di cui sopra sono facili da implementare come l'impostazione del alertViewStyle
proprietà sul tuo UIAlertView
, con notazione a punti:
message.alertViewStyle = UIAlertViewStylePlainTextInput;
O chiamando direttamente il metodo setter:
[message setAlertViewStyle: UIAlertViewStylePlainTextInput];
Questo è tutto! Dopo aver impostato questa proprietà, la visualizzazione della visualizzazione degli avvisi si adeguerà di conseguenza.
Ovviamente, la visualizzazione dei campi di testo nella visualizzazione degli avvisi non andrà molto bene a meno che non si possa anche accedere al valore inserito dall'utente. Questo è fatto con il textFieldAtIndex:
metodo. Fornisci semplicemente l'indice del campo di testo a cui vuoi accedere (0 - 1 negli esempi sopra) e il relativo UITextField
oggetto viene restituito.
Per un esempio di come questo potrebbe funzionare, si consideri il -alertView: clickedButtonAtIndex:
metodo delegato che abbiamo già implementato nel progetto demo allegato. Se cambiamo lo stile di visualizzazione degli avvisi su UIAlertViewStyleLoginAndPasswordInput
e cambia il titolo del pulsante predefinito in "Login", quindi potremmo accedere ai valori inseriti dall'utente nel metodo delegato in questo modo:
- (void) alertView: (UIAlertView *) alertView clickedButtonAtIndex: (NSInteger) buttonIndex NSString * title = [alertView buttonTitleAtIndex: buttonIndex]; if ([title isEqualToString: @ "Login"]) UITextField * username = [alertView textFieldAtIndex: 0]; UITextField * password = [alertView textFieldAtIndex: 1]; NSLog (@ "Nome utente:% @ \ nPassword:% @", username.text, password.text);
Esistono alcuni modi in cui l'utilizzo dei nuovi stili di avviso potrebbe ritorcersi contro.
Se aggiungi solo tre pulsanti al UIAlertView
, la disposizione di ogni nuovo stile sarà distorta.
Tutti i nuovi stili possono gestire comodamente 2 pulsanti, ma lo stile predefinito utilizzato in passato può gestire fino a 6 quando il titolo e il messaggio vengono rimossi:
Il UIAlertViewStyleLoginAndPasswordInput
lo stile non può gestire il testo di overflow con garbo come gli altri stili possono:
Anche inserendo solo un breve messaggio del tipo "Devi inserire sia un nome utente che una password." è stato sufficiente a rovinare l'estetica.
Oltre agli stili dei pulsanti discussi sopra, anche l'SDK di iOS 5 ne ha introdotto uno nuovo UIAlertViewDelegate
metodo, -alertViewShouldEnableFirstOtherButton:
. Questo metodo viene chiamato sia quando viene visualizzata la vista di avviso per la prima volta che ogni volta che l'utente digita un carattere in uno dei campi di testo, rendendo molto semplice l'esecuzione della convalida dell'input di base prima di accettare il valore di un utente.
Considera il seguente esempio:
- (IBAction) showMessage: (id) mittente UIAlertView * message = [[UIAlertView alloc] initWithTitle: @ "Qual è il tuo numero di telefono?" messaggio: nil delegate: self cancelButtonTitle: @ "Cancel" otherButtonTitles: @ "Continua", nil]; [message setAlertViewStyle: UIAlertViewStylePlainTextInput]; [messaggio mostra]; - (BOOL) alertViewShouldEnableFirstOtherButton: (UIAlertView *) alertView NSString * inputText = [[alertView textFieldAtIndex: 0] text]; if ([inputText length]> = 10) return YES; else return NO;
Il codice sopra consentirà all'utente di premere il pulsante "Continua" dopo aver inserito almeno 10 caratteri nel campo modulo. Sono sicuro che vorrai rendere più solida la tua convalida, ma questo esempio di base mostra quanto sia utile questo nuovo metodo delegato.