iOS 5 SDK UIAlertView Text Input e Validation

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.

Presentazione degli stili di visualizzazione degli avvisi

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:

UIAlertViewStylePlainTextInput

Questo stile aggiungerà un singolo campo di testo alla visualizzazione degli avvisi:

UIAlertViewStyleSecureTextInput

Questo stile è simile al campo di testo normale, tranne per il fatto che tutti i caratteri inseriti saranno oscurati:

UIAlertViewStyleLoginAndPasswordInput

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:

UIAlertViewStyleDefault

Questo è lo stile predefinito che tutti già conosciamo e amiamo:

Implementazione

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); 

Potenziali insidie

Esistono alcuni modi in cui l'utilizzo dei nuovi stili di avviso potrebbe ritorcersi contro.

Troppi pulsanti

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:

Troppo testo

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.

Convalida dell'input

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.