Dezvoltare pe iPhone (5): prima noastră aplicație (III)

En articolul nostru anterior Am inclus o etichetă, un TextField și un buton în interfața aplicației noastre. Am vrut ca conținutul etichetei să fie actualizat cu ceea ce a fost introdus în TextField atunci când făcem clic pe buton. Am creat (pasul 1) proiectul și (pasul 2) am folosit InterfaceBuilder pentru a defini ecranul. Acum vom continua cu restul pașilor pentru a lăsa aplicația să funcționeze.

Pasul 3. Creați variabile în ViewController.

Avem interfața corectă. De fapt, dacă am construi și vom putea vedea cum ne descurcăm:

Dar, evident, nu se întâmplă nimic atunci când apăsați butonul, deoarece nu am realizat evoluțiile esențiale minime. În acest pas 3 vom introduce variabilele și metodele în HelloWorldViewController, atât în ​​interfață (fișier .h), cât și în implementare (fișier .m). Pentru a face acest lucru, așa cum am indicat la sfârșitul postului anterior, trebuie să știm că TextField corespunde unei clase UITextField și eticheta unei clase UILabel. Aceste 2 clase se încadrează în cadrul UIKit.

Dacă nu am închis și salvat Interface Builder, o facem și în XCode deschidem fișierul HelloWorldViewController.h. Codul chiar acum va avea așa ceva:

Ne uităm deja la ceva Objective-C. În acest cod vedem o declarație de import a bibliotecii UIKit, unde sunt clasele UILabel și UITextField. Vedem cum este declarată interfața și că se extinde de la UIViewController generic al UIKit.

În cadrul codului de interfață includem următorul cod:

Acum putem explica ce am făcut:

  • Am declarat în blocul @interface 2 atribute de tip UILabel și UITextField, cu 2 nume de variabile * etichetă și, respectiv, * textField. Înainte apare IBOutlet. Ce sunt toate astea? Ne explicăm. IBOutlet nu este un tip de variabilă; este o directivă care ajută Interface Builder să cunoască existența acestor variabile de tip UILabel și UITextField. Apropo, amintiți-vă că în articolul precedent v-am dat un truc pentru a cunoaște tipurile variabile ale obiectelor de control (butoane, etichetă, câmp text etc.) în Interface Builder. Pe de altă parte, problema * în fața numelui variabilei poate surprinde programatorii Java, nu atât cei din C ... dar aflați că așa veți scrie variabilele de instanță în Objective-C.
  • Sunt declarate proprietățile UILabel și UITextField. nonatomic și retenție nu vom vedea pentru moment, este legat de gestionarea memoriei.
  • Vedem că declarăm o metodă, updateText. Are un semn - în față, indicând faptul că este o metodă de instanță și nu o metodă de clasă (pentru ei este explicat un semn +). Nu putem să explicăm acest lucru, deoarece aceasta este o programare de bază orientată obiect ... Această metodă nu returnează nimic (adică nul) și primește un parametru de tip id. Practic se referă la identificatorul obiectului care va determina apelul la metoda noastră updateTexto, care va actualiza valoarea etichetei. Putem ghici, deoarece controlul va fi butonul în sine ...

Odată ce acest lucru este făcut, am terminat cu pasul 3.


Pasul 4. Legați comenzile de vizualizare la variabilele controlerului.

Dacă analizăm, pe de o parte ne-am dezvoltat interfața cu Interface Builder și, pe de altă parte, avem variabilele legate de acele controale în HelloWorldViewController.h (interfața clasei de controller HelloWorldViewController.m). Cu toate acestea, nu există încă nicio relație între vizualizare și controler, adică nu am dat nicio instrucțiune pentru a raporta, de exemplu, câmpul de text pe care îl proiectăm în Interface Builder cu variabila de tip UITextField pe care am pus-o în clasa. Acum vom face această sarcină. Deschidem din nou Interface Builder făcând clic pe HelloWorldViewController.xib, facem clic pe caseta de text, iar în paleta Inspector mergem la a doua filă (Conexiuni câmp text). Vedem că există o secțiune numită Referencing Outlets, fără să existe nimic marcat. Asta înseamnă că, în acest moment, Interface Builder nu cunoaște nicio relație între acest câmp de text și un IBOutlet (Interface Builder Outlet) al unei clase ... dar avem un IBOutlet UITextField în HelloWorldViewController, așa că o vom lega.

Pentru a face acest lucru, așa cum vedem în figură, făcând clic pe cercul mic de lângă „New Referencing Outlet”, tragem la proprietarul fișierului din fereastra numită HelloWorldViewController.xib. Ne va permite să alegem 2 opțiuni, vizualizare (vizualizarea completă) și textField (variabila noastră). Evident, alegem textField și astfel ne raportăm caseta de text la variabila de tipul său UITextField. Apropo, proprietarul sau proprietarul fișierului nu este nici mai mult, nici mai puțin decât clasa noastră de controler ...

Repetăm ​​operația cu eticheta, corelând-o cu eticheta variabilă a controlerului nostru. Și cu butonul, este ceva diferit. În acest caz, o vom raporta la operațiunea noastră updateTexto, dar pentru un eveniment specific. Faceți acest lucru cu evenimentul „Touch Up Inside” și alegeți metoda noastră updateTexto:

Și în acest fel am raportat deja comenzile pe care le-am definit cu Interface Builder și variabilele pe care le-am pus în controler. Închidem Interface Builder salvând totul și trecem la ultimul pas revenind la XCode.

Pasul 5. Ultimele evoluții.

În XCode deschidem HelloWorldViewController.my și punem următorul cod astfel încât clasa noastră să arate astfel:

Dacă privim cu atenție, am pus pur și simplu blocul @synthesize și implementarea metodei declarate în interfața .h, updateTexto. Sub acel cod veți avea o mulțime de cod comentat.

Linia @synthesize face ceva similar cu generarea tipicului getter / setter (accesori / mutatori) tipic în limbile OO (încapsulare). Avem nevoie de ele, astfel încât controlerul să ajungă la conținutul, de exemplu, al casetei de text.

Metoda updateTexto, după cum puteți vedea, pur și simplu actualizează textul etichetei noastre cu conținutul câmpului de text. Am terminat.

Acum, facem pur și simplu Build & Go și veți vedea că atunci când introduceți un șir de text și faceți clic pe buton, conținutul etichetei este actualizat. În articolul următor vom introduce îmbunătățiri aplicației noastre.


Conținutul articolului respectă principiile noastre de etică editorială. Pentru a raporta o eroare, faceți clic pe aici.

4 comentarii, lasă-le pe ale tale

Lasă comentariul tău

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *

*

*

  1. Responsabil pentru date: Miguel Ángel Gatón
  2. Scopul datelor: Control SPAM, gestionarea comentariilor.
  3. Legitimare: consimțământul dvs.
  4. Comunicarea datelor: datele nu vor fi comunicate terților decât prin obligație legală.
  5. Stocarea datelor: bază de date găzduită de Occentus Networks (UE)
  6. Drepturi: în orice moment vă puteți limita, recupera și șterge informațiile.

  1.   Peter el a spus

    Foarte bun tutorial, foarte clar și simplu.

  2.   rubdottocom el a spus

    Ei bine, trebuie să fiu foarte pepene galben 🙁 pentru că nu funcționează pentru mine. Am captat valoarea într-un șir și ia textul, dar nu o atribuie etichetei, cel puțin nu o pictează, pentru că încerc să văd eticheta.text și îmi spune că nu intră în domeniul de aplicare ...

  3.   leo2279 el a spus

    Excelent tutorialele dvs., chiar explică foarte bine această dezvoltare pentru iPhone, sper să continuați să publicați mai multe tutoriale.

    salutări

  4.   Mariano el a spus

    Bună, toate mișto, dar nu funcționează. Pentru ca acesta să funcționeze, a trebuit să conectez vizualizarea constructorului de interfețe cu vizualizarea din cub, așa cum învățați să faceți cu câmpul de text și eticheta. În rest, mulțumesc foarte mult.