SDK pentru iOS UITextView & UITextViewDelegate

În acest tutorial pentru iOS SDK Basics, vom crea un UITextView, pune în aplicare UITextViewDelegate metode de protocol și utilizare NSLog pentru a vedea când sunt apelate metodele. De asemenea, vom atinge modul de limitare a numărului de caractere într-o vizualizare text și modul de utilizare a tastei retur pentru a demisiona tastatura. Citiți mai departe pentru a afla cum să implementați aceste funcții în aplicația dvs.!


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 "TextViewARC" ș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".

În câmpul "Nume produs", tastați "TextViewARC" ș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ății" ș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 UITextView

Un obiect UITextView poate fi creat programabil (adică în cod) sau grafic cu instrumentul Interface Builder. Acest tutorial va demonstra pe scurt modul de creare a obiectului cu ambele metode.

programatic

Faceți clic pe fișierul "ViewController.m" și introduceți următorul cod.

 Textul CGRect textViewFrame = CGRectMake (20.0f, 20.0f, 280.0f, 124.0f); UITextView * textView = [[UITextView alocare] initWithFrame: textViewFrame]; textView.returnKeyType = UIReturnKeyDone; [auto.view addSubview: textView];

Acest program creează o UITextView obiect și îl adaugă la viziunea ViewController.

Cu Interface Builder

Alternativ, aveți posibilitatea să creați o UITextView în fișierul .xib. Începeți făcând clic pe fișierul .xib din panoul "Navigator" din fereastra 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 Obiecte din colțul din stânga jos până găsiți un obiect "Text View". Faceți clic pentru ao selecta, apoi trageți-și plasați vizualizarea textului în vizualizare. Ajustați vizualizarea textului astfel încât să se afle în partea superioară a vederii și să aibă o înălțime de aproximativ 125 de pixeli.


Pasul 3: Înlăturarea tastaturii

Demisia tastaturii la atingerea fundalului poate fi realizată în moduri diferite. Codul de mai jos este un exemplu al unei astfel de tehnici. 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]; 

Pasul 4: Metode de protocol delegat

Pur și simplu a declarat, un delegat ajută două obiecte să comunice între ele. În cazul UITextViewDelegate metode, UITextView este capabil să comunice metodele delegaților atunci când apar anumite evenimente, cum ar fi când vizualizarea textului începe editarea. Când una dintre metode este trimisă în mesaje, aveți posibilitatea să efectuați acțiuni personalizate. Următoarele UITextViewDelegate implementările de metode demonstrează cum puteți face acest lucru.

Înainte de a implementa metodele delegate, să revenim și să setăm TextView delegați proprietatea la de sine pentru a seta ViewController obiect în calitate de delegat al UITextView. Faceți clic pe fișierul "ViewController.m". În viewDidLoad unde am creat programabil vizualizarea text, adăugați următorul cod deasupra [auto.view addSubview: textView]; line (puteți oricând să vă referiți la codul sursă atașat la această postare pentru ajutor).

 textView.delegate = auto;

Pentru a face același lucru cu vizualizarea text creată în Interface Builder, faceți clic pe fișierul "ViewController.xib". Selectați vizualizarea textului și faceți clic pe Vizualizare> Utilitare> Afișare conexiuni inspector. Faceți clic pe săgeata "Outlets" din panoul "Inspectors Connections" pentru ao deschide. Faceți clic pe cercul din dreptul opțiunii "delegați", apoi faceți clic și trageți din cerc în "Proprietarul fișierului" pentru a stabili conexiunea dintre vizualizarea textului și ViewController.

Faceți clic pe "ViewController.h" și introduceți codul următor pentru a vă conforma UITextViewDelegate protocol.

 @ interfață ViewController: UIViewController 

UITextViewDelegate metode de protocol sunt opționale, ceea ce înseamnă că nu trebuie să le implementați dacă nu le folosiți. Să vorbim despre metodele pe care le adăugăm.

textViewShouldBeginEditing: și textViewDidBeginEditing:

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

 - (BOOL) textViewShouldBeginEditing: (UITextView *) textView NSLog (@ "textViewShouldBeginEditing:"); reveniți DA;  - (void) textViewDidBeginEditare: (UITextView *) textView NSLog (@ "textViewDidBeginEditing:"); textView.backgroundColor = [UICcolor verdeColor]; 

Metoda textViewShouldBeginEditing: se numește chiar inainte afișarea textului devine activă. Metoda textViewDidBeginEditing: se numește cand afișarea textului devine activă și modifică starea primului respondent. Comportamentele de comportament pe care doriți să le faceți în timp ce vizualizarea textului devine activă ar trebui să meargă aici. În exemplul nostru, culoarea de fundal a ecranului text devine verde când vizualizarea text este activă.

textViewShouldEndEditing: și textViewDidEndEditing:

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

 - (BOOL) textViewShouldEndEditing: (UITextView *) textView NSLog (@ "textViewShouldEndEditing:"); textView.backgroundColor = [UICcolor whiteColor]; reveniți DA;  - (void) textViewDidEndEditing: (UITextView *) textView NSLog (@ "textViewDidEndEditing:"); 

textViewShouldEndEditing: se numește chiar inainte afișarea textului devine inactivă. textViewDidEndEditing: se numește cand afișarea textului devine inactivă. Ele sunt similare cu cele două metode numite atunci când vizualizarea textului începe editarea și oricare dintre metode este un loc potrivit pentru logica care este declanșată pe măsură ce utilizatorul este terminat de editat. În exemplul nostru, folosim textViewShouldEndEditing: pentru a readuce culoarea de fundal la culoarea sa normală.

TextView: shouldChangeCharactersInRange: replacementString

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

 - (BOOL) textView: (UITextView *) textView shouldChangeTextInRange: (NSRange) interval înlocuireText: (NSString *) text NSCharacterSet * doneButtonCharacterSet = [NSCharacterSet newlineCharacterSet]; Înlocuirea NSRangeTextRange = [intervalul de textOfCharacterFromSet: doneButtonCharacterSet]; Locația NSUInteger = replacementTextRange.location; dacă (textView.text.length + text.length> 140) if (localizare! = NSNotFound) [textView resignFirstResponder];  retur NO;  altfel dacă (locația! = NSNotFound) [textView resignFirstResponder]; retur NO;  reveniți DA; 

De fiecare dată când un utilizator introduce un caracter pe tastatură, chiar înainte de afișarea caracterului, metoda TextView: shouldChangeCharactersInRange: replacementString se numește. Aceasta este o locație la îndemână pentru a testa caracterele pe care un utilizator le scrie și dezactivează anumite caractere pe care doriți să le restricționați. În exemplul nostru, folosim cheia terminată pentru a demisiona tastatura testând pentru a vedea dacă textul înlocuitor conține oricare dintre caracterele din newLineCharacterSet. Dacă este un personaj din newLineCharacterSet, atunci este butonul terminat care a fost apăsat și, prin urmare, tastatura ar trebui să demisioneze. În plus, prin testarea lungimii curente a ecranului text de fiecare dată când un personaj este scris și returnat NU dacă este mai mare de 140 de caractere, vizualizarea textului se limitează la nu mai mult de 140 de caractere.

textViewDidChange:

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

 - (vid) textViewDidChange: (UITextView *) textView NSLog (@ "textViewDidChange:"); 

Metoda textViewDidChange: este apelată numai atunci când textul din vizualizarea textului este modificat de utilizator. Există o varietate de comportamente pe care ați putea dori să le personalizați în funcție de momentul în care utilizatorul modifică textul în vizualizarea text. O instanță este dacă afișați numărul de caractere rămase când o vizualizare text este limitată la 140 de caractere. De fiecare dată când se modifică textul, numărul afișat poate fi actualizat.

textViewDidChangeSelection:

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

 - (void) textViewDidChangeSelecție: (UITextView *) textView NSLog (@ "textViewDidChangeSelection:"); 

Metoda textViewDidChangeSelection: este apelată când se selectează o secțiune de text sau se modifică selecția, cum ar fi atunci când se copiază sau se lipsește o secțiune de text. Deși aceasta este probabil una dintre metodele delegate mai puțin utilizate, în anumite circumstanțe poate fi utilă personalizarea comportamentului vizualizării textului atunci când textul este selectat.


Pasul 5: Testarea vizualizărilor de text

Faceți clic pe Build> Run sau faceți clic pe săgeata "Run" din colțul din stânga sus. Deschideți consola și explorați vizualizarea textului. NSLog în fiecare metodă se va afișa un șir în consolă atunci când este apelată metoda delegată.

Iată cum apare textul în simulator:


Concluzie

Prin înțelegerea când UITextViewDelegate metode de protocol sunt numite, puteți profita din plin de funcționalitatea construită în delegat. Dacă găsiți că o metodă delegată nu este poziționată la locul potrivit în interacțiunea utilizatorului, încercați o altă metodă. La un moment dat, veți găsi metoda potrivită pentru a vă plasa logica, făcând aplicația să funcționeze exact așa cum doriți!

Cod