En náš predchádzajúci článok Do rozhrania našej aplikácie sme zahrnuli štítok, Textové pole a Tlačidlo. Chceli sme, aby sa obsah štítku aktualizoval tým, čo bolo zadané do poľa TextField po kliknutí na tlačidlo. Vytvorili sme (krok 1) projekt a (krok 2) sme pomocou programu InterfaceBuilder definovali obrazovku. Teraz budeme pokračovať zvyšnými krokmi, aby sme aplikáciu nechali funkčnú.
Krok 3. Vytvorte premenné v ViewController.
Naše rozhranie máme správne. Ak by sme vytvorili Build & Go, mohli by sme vidieť, ako to vyzerá:
Po stlačení tlačidla sa ale zjavne nič nedeje, pretože sme neurobili minimálny zásadný vývoj. V tomto kroku 3 uvedieme premenné a metódy v HelloWorldViewController, a to ako v rozhraní (súbor .h), tak aj v implementácii (.m súbor). Aby sme to dosiahli, ako sme už naznačili na konci predchádzajúceho príspevku, musíme vedieť, že TextField zodpovedá triede UITextField a štítok triede UILabel. Tieto 2 triedy patria do rámca UIKit.
Pokiaľ sme neotvorili a neuložili Interface Builder, urobíme to a v XCode otvoríme súbor HelloWorldViewController.h. Tento kód bude mať teraz niečo také:
Už sa pozeráme na nejaký Objective-C. V tomto kóde vidíme deklaráciu importu knižnice UIKit, kde sú triedy UILabel a UITextField. Vidíme, ako je rozhranie deklarované a že sa rozširuje od generického UIViewController UIKit.
V rámci kódu rozhrania zahrňujeme nasledujúci kód:
Teraz môžeme vysvetliť, čo sme urobili:
- V bloku @interface sme deklarovali 2 atribúty typu UILabel a UITextField s 2 názvami premenných * label a * textField. Pred nami sa zobrazuje IBOutlet. Čo je toto všetko? Vysvetľujeme si to. IBOutlet nie je typ premennej; je smernica, ktorá pomáha Interface Builder poznať existenciu týchto premenných typu UILabel a UITextField. Mimochodom, nezabudnite, že v predchádzajúcom článku sme vám poskytli trik, ako poznať typy premenných ovládacích objektov (tlačidlá, štítok, textové pole atď.) V Interface Builder. Na druhej strane, otázka * pred názvom premennej môže prekvapiť programátorov Javy, a to ani nie tak v C ..., ale naučte sa, že takto budete písať inštančné premenné v Objective-C.
- Vlastnosti UILabel a UITextField sú deklarované. neanatomické a ponecháme si to zatiaľ neuvidíme, súvisí to so správou pamäte.
- Vidíme, že deklarujeme metódu updateText. Má pred sebou znamienko -, čo naznačuje, že ide o inštančnú metódu, a nie metódu triedy (pre ne je vysvetlené znamienko +). Nemôžeme to vysvetliť, pretože ide o základné objektovo orientované programovanie ... Táto metóda nevracia nič (to znamená neplatné) a prijíma parameter typu id. V zásade ide o identifikátor objektu, ktorý spôsobí volanie našej metódy updateTexto, ktorá aktualizuje hodnotu štítka. Môžeme hádať, pretože týmto ovládacím prvkom bude samotné tlačidlo ...
Akonáhle je to hotové, sme hotoví s krokom 3.
Krok 4. Viazanie ovládacích prvkov zobrazenia na premenné ovládača.
Ak to skontrolujeme, na jednej strane sme vyvinuli naše rozhranie s Interface Builder a na druhej strane máme premenné súvisiace s týmito ovládacími prvkami v HelloWorldViewController.h (rozhranie triedy ovládačov HelloWorldViewController.m). Stále však neexistuje žiadny vzťah medzi pohľadom a radičom, to znamená, že sme nedali žiadne pokyny týkajúce sa napríklad textového poľa, ktoré navrhneme v Interface Builder s premennou typu UITextField, ktorú sme vložili do triedy. Teraz urobíme túto úlohu. Znovu otvoríme Interface Builder kliknutím na HelloWorldViewController.xib, kliknutím na textové pole a v palete Inšpektor prejdeme na druhú kartu (Pripojenia textového poľa). Vidíme, že existuje časť s názvom Referenčné zásuvky, bez toho, aby tam bolo niečo označené. To znamená, že momentálne Interface Builder nepozná žiadny vzťah medzi týmto textovým poľom a IBOutletom (Interface Builder Outlet) triedy ... ale v našom HelloWorldViewController máme UITextField IBOutlet, takže ho prepojíme.
Za týmto účelom, ako vidíme na obrázku, kliknutím na malý krúžok vedľa položky «Nový odkaz na výstup» potiahneme na vlastníka súboru v okne s názvom HelloWorldViewController.xib. Umožní nám to zvoliť 2 možnosti, view (úplné zobrazenie) a textField (naša premenná). Je zrejmé, že zvolíme textField, a teda naše textové pole spojíme s premennou jeho typu UITextField. Mimochodom, vlastník alebo vlastník súboru nie je o nič menej ako naša trieda ovládačov ...
Opakujeme operáciu so štítkom, ktorá sa vzťahuje k nášmu štítku premennej ovládača. A s tlačidlom je to niečo iné. V tomto prípade to budeme spájať s našou operáciou updateTexto, ale pre konkrétnu udalosť. Urobte to pomocou udalosti „Touch Up Inside“ a vyberte našu metódu updateTexto:
A týmto spôsobom sme už súviseli s ovládacími prvkami, ktoré sme definovali pomocou Interface Builder, a s premennými, ktoré sme vložili do kontroléra. Zatvoríme Interface Builder a všetko uložíme a ideme na posledný krok späť do XCode.
Krok 5. Najnovší vývoj.
V XCode otvoríme HelloWorldViewController.my a vložíme nasledujúci kód, aby naša trieda vyzerala takto:
Ak sa pozrieme pozorne, jednoducho sme vložili blok @synthesize a implementáciu metódy deklarovanej v rozhraní .h, updateTexto. Pod týmto kódom budete mať veľa komentovaných kódov.
Riadok @synthesize robí niečo podobné ako generovanie typického getra / setra (prístupové / mutačné) typické pre jazyky OO (zapuzdrenie). Potrebujeme ich, aby sa obsah dostal ku kontrolóru napríklad textového poľa.
Metóda updateTexto, ako vidíte, jednoducho aktualizuje text nášho štítku o obsah textového poľa. Sme hotoví.
Teraz jednoducho urobíme program Build & Go a uvidíte, že keď zadáte textový reťazec a kliknete na tlačidlo, aktualizuje sa obsah štítka. V nasledujúcom článku predstavíme vylepšenia našej aplikácie.
Veľmi dobrý návod, veľmi jasný a jednoduchý.
No, musím byť veľmi melón 🙁, pretože mi to nejde. Zachytil som hodnotu v reťazci a zaberá text, ale nepriraďuje ho štítku, aspoň ho nevymaľuje, pretože sa snažím vidieť štítok.text a hovorí mi to z rozsahu ...
Vynikajúce vaše výukové programy, skutočne veľmi dobre vysvetľuje tento vývoj pre iPhone, dúfam, že budete pokračovať v publikovaní ďalších výučbových programov.
ide o
Ahoj, v pohode, ale nefunguje to. Aby to fungovalo, musel som prepojiť pohľad staviteľa rozhrania s pohľadom v kocke, ako to naučíte s textovým poľom a štítkom. Za ostatné veľmi pekne ďakujem.