iOS SDK UITextField & UITextFieldDelegate

Acest tutorial pentru iOS SDK pentru începători vă va învăța cum să construiți o interfață simplă care să conțină un nume de utilizator și o parolă UITextField. Vom aborda atât modul de adăugare a câmpului de text în Interface Builder, cât și modul de creare a unui program. În plus, vom explora UITextFieldDelegate metode de protocol și demonstrează câteva tehnici la îndemână pentru lucrul cu datele introduse de utilizator.


Crearea elementelor programate

Crearea elementelor, cum ar fi un câmp text, se poate face într-una din cele două moduri. Puteți să-l creați în Interface Builder sau să îl puteți codifica în mod programatic. Deși este mai convenabil să creați un element în Interface Builder, mulți programatori preferă să creeze elemente în mod programat. Acest tutorial va explica pe scurt ambele opțiuni.


Pasul 1: Creați un nou proiect Xcode

Lansați Xcode și faceți clic pe File> New> Project. Faceți clic pe "Aplicație" sub panoul iOS din stânga. Faceți clic pe pictograma intitulată "Aplicație cu vizualizare unică" și faceți clic pe "Următorul".

În câmpul "Nume produs", tastați "TextFieldARC" și introduceți un nume pentru identificatorul companiei dvs., cum ar fi "com.companyName". Alegeți "iPhone" din meniul "Device Family". Asigurați-vă că debifați "Utilizați Storyboards" și "Includeți testele unităților" și bifați "Utilizați numărarea automată a referințelor" înainte de a da clic pe "Next". Alegeți o locație pentru stocarea proiectului și faceți clic pe "Creați".


Pasul 2: Crearea unui UITextField

programatic

Faceți clic pe fișierul "ViewController.m" și introduceți în codul următor viewDidLoad metodă.

 Parola CGRectTextFieldFrame = CGRectMake (20.0f, 100.0f, 280.0f, 31.0f); UITextField * passwordTextField = [[Alocare UITextField] initWithFrame: passwordTextFieldFrame]; passwordTextField.placeholder = @ "Parola"; passwordTextField.backgroundColor = [UICcolor whiteColor]; passwordTextField.textColor = [UICcolor blackColor]; passwordTextField.font = [UIFont sistemFontOfSize: 14.0f]; passwordTextField.borderStyle = UITextBorderStyleRoundedRect; passwordTextField.clearButtonMode = UITextFieldViewModeWhileEditing; passwordTextField.returnKeyType = UIReturnKeyDone; passwordTextField.textAlignment = UITextAlignmentLeft; passwordTextField.contentVerticalAlignment = UIControlContentVerticalAlignmentCenter; passwordTextField.tag = 2; passwordTextField.autocapitalizationType = UITextAutocapitalizationTypeNone; [self.view addSubview: passwordTextField];

Observați că proprietatea tagului câmpului de text este setată la "2." Setarea proprietății etichetei este o modalitate de a urmări care câmp de text este activ în program.

Cu Interface Builder

Faceți clic pe fișierul "ViewController.xib" din panoul "Navigator" al proiectului dvs. Xcode. Faceți clic pe "Vizualizare" din panoul "Document Outline" din stânga. Faceți clic pe Vizualizare> Utilitare> Afișați bibliotecă de obiecte. Derulați biblioteca de obiecte în colțul din stânga jos până când găsiți un obiect "Text câmp". Faceți clic pentru ao selecta, apoi trageți-și plasați câmpul text în vizualizare.

Ajustați câmpul text astfel încât să se întindă în partea de sus a ecranului. Cu câmpul de text selectat, faceți clic pe Vizualizare> Utilități> Afișați inspectorul atributelor. Căutați câmpul "Placeholder" din panoul "Inspecții atribute" din "Câmp text" și schimbați-l la "Nume de utilizator". Dați clic pe meniul derulant "Ștergeți butonul" și alegeți "Apare în timpul editării". Faceți clic pe meniul derulant "Return Key" și alegeți "Next". În cele din urmă, derulați în jos până la câmpul "Tag" sub "Vizualizare" și schimbați-l la "1." Faceți clic pe File> Save.

Dacă rulați programul acum, ar trebui să aveți a UITextField obiect de pe ecran care poate primi de intrare! Puteți accesa valoarea obiectului cu text proprietate (adică passwordTextField.text).

Cu toate acestea, utilizarea TextField în acest moment va prezenta o problemă notabilă. Nu există o metodă implicită pentru eliminarea tastaturii din vizualizare. Deci, pentru următorul nostru truc ...


Pasul 3: Înlăturarea tastaturii

Demisia tastaturii la atingerea fundalului poate fi realizată în moduri diferite. Codul de mai jos este un exemplu de tehnică. Faceți clic pe fișierul "ViewController.m" și adăugați următoarea implementare a metodei:

 - (void) atingeBegan: (NSSet *) atingeEvent: (UIEvent *) eveniment NSLog (@ "touchesBegan: withEvent:"); [end.edit.view: YES]; [super-atingeBegan: atinge cu Eveniment: eveniment]; 

Executați din nou proiectul și acum ar trebui să puteți să respingeți tastatura pur și simplu apăsând pe ecran.


Pasul 4: Metode de protocol delegat

Delegația este un model de design care permite în esență două obiecte să comunice între ele. A UITextField mesajul obiect corespunzător UITextFieldDelegate când apar anumite evenimente, cum ar fi atunci când câmpul text începe editarea. Când este trimis un mesaj la una dintre metode, aveți posibilitatea de a efectua acțiuni personalizate. Obiectul care primește mesajele delegate poate fi orice obiect care este conform cu protocolul delegat, în acest caz UITextFieldDelegate. Cu toate acestea, în cel mai frecvent scenariu, obiectul care primește UITextField delega mesajele vor fi aceleași UIViewController obiect care conține UITextField ca subiectiv.

Faceți clic pe fișierul "ViewController.m". În viewDidLoad unde am creat programabil câmpul de text de mai sus, adăugați următorul cod:

 passwordTextField.delegate = auto; // ADAUGATI ACEASTA LINE [self.view addSubview: passwordTextField];

Prin setarea textfield delegați proprietatea la de sine, ViewController Obiectul devine delegat al câmpului de text și este capabil să implementeze UITextFieldDelegate metode.

Pentru a seta delegatul pentru câmpul text creat în Interface Builder, faceți clic pe "ViewController.xib". Faceți clic pe câmpul de text din vizualizare și faceți clic pe Vizualizare> Utilitare> Afișare inspecții conexiuni. Căutați "delegat" sub "Prize" în panoul "Inspector de conexiuni" din dreapta. Faceți clic pe cercul adiacent acesteia și trageți-l pe "Proprietarul fișierului" din panoul "Document Outline" din stânga. Aceasta conduce câmpul de text astfel încât ViewController obiect este setat ca delegatul câmpului de text. Faceți clic pe File> Save.

În cele din urmă, dați clic pe "ViewController.h" și introduceți codul următor pentru a se conforma clasei cu UITextFieldDelegate protocol:

 @ interfață ViewController: UIViewController 

Următoarele UITextFieldDelegate metodele protocolului sunt toate opționale, ceea ce înseamnă că ele nu trebuie să fie puse în aplicare de delegat. Cu toate acestea, le vom implementa pe toate pentru a învăța despre ele. Să discutăm metodele în timp ce le introducem.

textFieldShouldBeginEditing: și textFieldDidBeginEditing:

Faceți clic pe "ViewController.m" și adăugați următorul cod.

 - (BOOL) textFieldShouldBeginEditing: (UITextField *) textField NSLog (@ "textFieldShouldBeginEditing"); textField.backgroundColor = [UICcolor colorWithRed: 220.0f / 255.0f verde: 220.0f / 255.0f albastru: 220.0f / 255.0f alpha: 1.0f]; reveniți DA;  - (void) textFieldDidBeginEditare: (UITextField *) textField NSLog (@ "textFieldDidBeginEditing"); 

textFieldShouldBeginEditing: se numește chiar inainte câmpul de text devine activ. Acesta este un loc bun pentru personalizarea comportamentului aplicației dvs. În acest caz, culoarea de fundal a câmpului de text se modifică atunci când această metodă este chemată pentru a indica câmpul text este activ. textFieldDidBeginEditing: se numește cand câmpul de text devine activ.

textFieldShouldEndEditing: și textFieldDidEndEditing:

Adăugați următorul cod sub metodele anterioare.

 - (BOOL) textFieldShouldEndEditing: (UITextField *) textField NSLog (@ "textFieldShouldEndEditing"); textField.backgroundColor = [UICcolor whiteColor]; reveniți DA;  - (void) textFieldDidEndEditing: (UITextField *) TextField NSLog (@ "textFieldDidEndEditing"); 

Aceste două metode sunt similare cu metodele care sunt numite atunci când câmpul de text începe editarea. textFieldShouldEndEditing: se numește chiar inainte câmpul de text devine inactiv și textFieldDidEndEditing: se numește cand câmpul text devine inactiv. Interior textFieldShouldEndEditing:, culoarea de fundal este schimbată înapoi în alb, astfel încât câmpul textului să poată reveni la culoarea originală. Din nou, aceste metode vă oferă posibilitatea de a personaliza comportamentul aplicației, deoarece câmpul de text devine inactiv.

textfield: shouldChangeCharactersInRange: replacementString

Adăugați următorul cod sub metodele anterioare.

 - (BOOL) textField: (UITextField *) textField shouldChangeCharactersInRange: (NSRange) intervalul de înlocuireString: (NSString *) string NSLog (@ "textField: shouldChangeCharactersInRange: replaceString:"); dacă ([string esteEqualToString: @ "#"]) return NO;  altceva return YES; 

textFieldShouldChangeCharactersInRange: înlocuireString: se numește de fiecare dată când utilizatorul introduce un caracter pe tastatură. De fapt, această metodă este chemată chiar înainte de afișarea unui caracter. Dacă doriți să restricționați anumite caractere dintr-un câmp de text, aceasta este metoda pentru dvs. După cum puteți vedea în exemplul nostru, am adăugat o logică pentru a interzice simbolul "#".

textFieldShouldClear:

Adăugați următorul cod sub metodele anterioare.

 - (BOOL) textFieldShouldClear: (UITextField *) TextField NSLog (@ "textFieldShouldClear:"); reveniți DA; 

textFieldShouldClear: este apelat atunci când utilizatorul apasă butonul de ștergere, gri "x", în interiorul câmpului de text. Înainte ca câmpul de text activ să fie șters, această metodă vă oferă posibilitatea de a efectua personalizările necesare.

textFieldShouldReturn:

Adăugați următorul cod sub metodele anterioare.

 - (BOOL) textFieldShouldReturn: (UITextField *) TextField NSLog (@ "textFieldShouldReturn:"); dacă (textField.tag == 1) UITextField * passwordTextField = (UITextField *) [vizualizare auto.viewWithTag: 2]; [passwordTextField becomeFirstResponder];  altfel [textField resignFirstResponder];  reveniți DA; 

textFieldShouldReturn: este apelat atunci când utilizatorul apasă tasta de întoarcere de pe tastatură. În acest exemplu, aflăm câmpul de text care este activ prin vizionarea proprietății etichetei. Dacă câmpul de text "Nume de utilizator" este activ, următorul câmp de text, "Parolă", ar trebui să devină activ în schimb. Dacă câmpul de text "Parolă" este activ, "Parola" ar trebui să demisioneze, resemnând tastatura cu ea.


Pasul 5: Testarea câmpurilor de text

Faceți clic pe Build> Run sau faceți clic pe săgeata "Run" din colțul din stânga sus. Cu consola deschisă, jucați cu câmpurile de text. NSLog plasat în fiecare din metodele protocolului delegat, ajută în prealabil la vizualizarea circumstanțelor în care se numește fiecare metodă delegată.


Concluzie

UITextFieldDelegate metode de protocol oferă o mare oportunitate de a personaliza comportamentul unui a UITextField. Acest tutorial se axează pe unele dintre sarcinile mai des întâlnite UITextField, cum ar fi demisia tastaturii și trecerea la câmpul de text următor, însă posibilitățile de personalizare a comportamentului sunt nesfârșite. Odată ce începeți să înțelegeți modelul de design delegat, este mai ușor să vă ramificați în alte obiecte pre-construite care utilizează delegați, cum ar fi UITableView sau UIScrollView. Ține prietena ta veche NSLog în buzunarul din spate când începeți să explorați alți delegați și vă va ajuta să înțelegeți funcționarea interioară a delegatului.

Cod