iOS 5 SDK UIAlertView Intrare text și validare

Odată cu lansarea iOS 5 SDK, clasa UIAlertView a fost actualizată pentru a sprijini nativ introducerea de text, introducerea sigură a textului și câmpurile de nume de utilizator / parolă. Acest sfat rapid va demonstra cum să beneficiați de aceste îmbunătățiri noi!

Într-un tutorial de lungă durată anterior pentru începători, am mers cititorul prin crearea unui proiect cu un buton personalizat și fundal. Voi folosi proiectul creat în tutorial ca punct de plecare pentru acesta.

Introducerea stilurilor de vizualizare a alertelor

Elementul de aspect și de formă al unui a UIAlertView pot fi acum ușor și rapid controlate prin setarea alertViewStyle proprietate. Posibilele opțiuni pentru această proprietate includ:

UIAlertViewStylePlainTextInput

Acest stil va adăuga un câmp de text unic în vizualizarea alertă:

UIAlertViewStyleSecureTextInput

Acest stil este la fel ca câmpul text simplu, cu excepția faptului că toate caracterele introduse vor fi ascunse:

UIAlertViewStyleLoginAndPasswordInput

Setarea acestei valori pentru proprietatea stilului va adăuga atât o intrare obișnuită a câmpului de text pentru un nume de utilizator și o intrare de câmp securizat pentru o parolă:

UIAlertViewStyleDefault

Acesta este stilul implicit pe care toți îl cunoaștem și îl iubim:

Punerea în aplicare

Orice dintre stilurile de mai sus este la fel de ușor de implementat ca și setarea alertViewStyle proprietate pe dvs. UIAlertView, fie cu notație punct:

message.alertViewStyle = UIAlertViewStylePlainTextInput;

Sau prin apelarea directă a metodei setter:

[mesajul setAlertViewStyle: UIAlertViewStylePlainTextInput];

Asta e! După ce ați setat această proprietate, afișarea vizualizării de avertizare se va ajusta în consecință.

Desigur, afișarea câmpurilor de text în vizualizarea de alertă nu va face prea bine dacă nu puteți accesa și valoarea pe care o introduce utilizatorul. Acest lucru se face cu textFieldAtIndex: metodă. Pur și simplu furnizați indexul câmpului de text pe care doriți să îl accesați (0 - 1 în exemplele de mai sus) și informațiile relevante UITextField obiectul este returnat.

Pentru un exemplu despre cum ar putea funcționa acest lucru, luați în considerare -alertView: clickedButtonAtIndex: delegate metodă pe care am implementat-o ​​deja în proiectul demo atașat. Dacă schimbăm stilul de vizualizare a alertei UIAlertViewStyleLoginAndPasswordInput și modificați titlul implicit al butonului la "Login", atunci am putea accesa valorile introduse de utilizator în metoda delegate, cum ar fi:

- (void) alertView: (UIAlertView *) alertView clicedButtonAtIndex: (NSInteger) buttonIndex NSString * title = [butonul alertViewTitleAtIndex: buttonIndex]; dacă [[title esteEqualToString: @ "Conectare"]) UITextField * username = [alertView textFieldAtIndex: 0]; UITextField * parola = [alertView textFieldAtIndex: 1]; NSLog (@ "Nume de utilizator:% @ \ nPassword:% @", username.text, password.text); 

Potențiale capcane

Există câteva moduri în care utilizarea noilor stiluri de alertă ar putea avea efecte negative.

Prea multe butoane

Dacă adăugați doar trei butoane la UIAlertView, aspectul fiecărui stil nou va deveni înclinat.

Toate stilurile noi se pot ocupa cu 2 butoane confortabil, dar stilul implicit utilizat în trecut poate ocupa până la 6 atunci când titlul și mesajul sunt eliminate:

Prea mult text

UIAlertViewStyleLoginAndPasswordInput stilul nu poate gestiona cu precizie textul grațios modul în care alte stiluri pot:

Chiar introducând doar un mesaj scurt precum "Trebuie să introduceți atât un nume de utilizator, cât și o parolă". a fost suficient pentru a distruge estetica.

Validarea intrărilor

În plus față de stilurile de butoane discutate mai sus, iOS 5 SDK a introdus, de asemenea, un nou UIAlertViewDelegate metodă, -alertViewShouldEnableFirstOtherButton:. Această metodă se numește atât atunci când vizualizarea de alertă este afișată pentru prima oară, dar și de fiecare dată când utilizatorul introduce un caracter într-unul dintre câmpurile de text, ceea ce face foarte ușor pentru a efectua validarea de bază înainte de a accepta valoarea unui utilizator.

Luați în considerare următorul exemplu:

- (IBAction) showMessage: (id) expeditor UIAlertView * message = [[UIAlertView alloc] initWithTitle: @ "Care este numărul dvs. de telefon?" mesaj: delegat zero: self cancelButtonTitle: @ "Cancel" altButtonTitles: @ "Continue", nil]; [mesajul setAlertViewStyle: UIAlertViewStylePlainTextInput]; [mesajul arată];  - (BOOL) alertViewShouldEnableFirstOtherButton: (UIAlertView *) alertView NSString * inputText = [[alertView textFieldAtIndex: 0] text]; dacă ([lungimea inputText]> = 10) return YES;  altceva return NO; 

Codul de mai sus va permite utilizatorului să apese butonul "Continuare" numai după ce a introdus cel puțin 10 caractere în câmpul de formular. Sunt sigur că veți dori să faceți validarea proprie mai robustă, dar acest exemplu de bază arată cât de utilă este această nouă metodă de delegat.

Cod