Programowanie na iPhone'a (5): nasza pierwsza aplikacja (III)

En nasz poprzedni artykuł w interfejsie naszej aplikacji umieściliśmy Label, TextField i Button. Chcieliśmy, aby zawartość etykiety była aktualizowana o to, co zostało wprowadzone w polu tekstowym po kliknięciu przycisku. Utworzyliśmy (krok 1) projekt i (krok 2) użyliśmy InterfaceBuilder do zdefiniowania ekranu. Teraz będziemy kontynuować pozostałe kroki, aby uruchomić aplikację.

Krok 3. Utwórz zmienne w ViewController.

Mamy nasz interfejs poprawnie. W rzeczywistości, gdybyśmy wykonali Build & Go, moglibyśmy zobaczyć, jak sobie radzimy:

Ale oczywiście nie ma nic złego w kliknięciu przycisku, ponieważ nie przeprowadziliśmy niezbędnych minimalnych zmian. W tym kroku 3 wprowadzimy zmienne i metody w HelloWorldViewController, zarówno w interfejsie (plik .h), jak iw implementacji (plik .m). Aby to zrobić, jak wskazaliśmy na końcu poprzedniego wpisu, musimy wiedzieć, że TextField odpowiada klasie UITextField, a Label klasie UILabel. Te 2 klasy znajdują się w ramach UIKit.

Jeśli nie zamknęliśmy i nie zapisaliśmy Interface Builder, robimy to iw XCode otwieramy plik HelloWorldViewController.h. Kod w tej chwili będzie wyglądał mniej więcej tak:

Widzimy już trochę Objective-C. W tym kodzie widzimy deklarację importu biblioteki UIKit, w której znajdują się klasy UILabel i UITextField. Widzimy, jak interfejs jest zadeklarowany i jak rozciąga się on od ogólnego kontrolera UIViewController UIKit.

W kodzie interfejsu umieszczamy następujący kod:

Możemy teraz wyjaśnić, co zrobiliśmy:

  • Zadeklarowaliśmy w bloku @interface 2 atrybuty typu UILabel i UITextField, z 2 nazwami zmiennych odpowiednio *label i *textField. Z przodu pojawia się IBOutlet. Co to wszystko jest? Wyjaśniamy sobie. IBOutlet nie jest typem zmiennej; to dyrektywa, która pomaga programowi Interface Builder dowiedzieć się o istnieniu tych zmiennych typu UILabel i UITextField. Nawiasem mówiąc, pamiętaj, że w poprzednim artykule daliśmy ci sztuczkę, aby poznać typy zmiennych obiektów kontrolnych (przyciski, etykiety, pola tekstowe itp.) w Konstruktorze interfejsów. Z drugiej strony kwestia * przed nazwą zmiennej może zaskoczyć programistów Javy, nie tyle programistów C...
  • Właściwości UILabel i UITextField są zadeklarowane. nieatomowe i zachowane nie zostaną na razie omówione, jest to związane z zarządzaniem pamięcią.
  • Widzimy, że deklarujemy metodę updateText. Ma przed sobą znak – wskazujący, że jest to metoda instancyjna, a nie klasowa (znak + jest dla nich wyjaśniony). Nie możemy w to wchodzić, ponieważ jest to podstawowe programowanie obiektowe… Ta metoda nic nie zwraca (tj. void) i otrzymuje parametr typu id. Zasadniczo odnosi się do identyfikatora obiektu, który spowoduje wywołanie naszej metody updateText, która zaktualizuje wartość etykiety. Już możemy się domyślić, że tą kontrolką będzie sam przycisk...

Gdy to zrobimy, zakończymy krok 3.


Krok 4. Powiąż kontrolki widoku ze zmiennymi kontrolera.

Jeśli przejrzymy, z jednej strony opracowaliśmy nasz interfejs za pomocą Interface Builder, az drugiej mamy zmienne związane z tymi kontrolkami w HelloWorldViewController.h (interfejs klasy kontrolera HelloWorldViewController.m). Jednak nadal nie ma związku między widokiem a kontrolerem, to znaczy nie wydaliśmy żadnych instrukcji dotyczących powiązania, na przykład, pola tekstowego, które zaprojektowaliśmy w Konstruktorze interfejsów, ze zmienną typu UITextField, którą umieściliśmy w klasa . Teraz wykonamy to zadanie. Otwieramy ponownie Interface Builder klikając na HelloWorldViewController.xib, klikamy na pole tekstowe, aw palecie Inspector przechodzimy do drugiej zakładki (Text Field Connections). Widzimy, że istnieje sekcja o nazwie Punkty odniesienia, w której nic nie jest zaznaczone. Oznacza to, że w tej chwili Konstruktor interfejsów nie wie o żadnym związku między tym polem tekstowym a IBOutlet (wylotem konstruktora interfejsu) klasy… ale mamy IBOutlet UITextField w naszym HelloWorldViewController, więc zwiążmy to.

Aby to zrobić, jak widać na rysunku, klikając małe kółko obok „New Referencing Outlet”, przeciągamy do okna Właściciela pliku o nazwie HelloWorldViewController.xib. Pozwoli nam to wybrać 2 opcje, view (pełny widok) i textField (nasza zmienna). Oczywiście wybieramy textField, a więc odnosimy nasze pole tekstowe do zmiennej typu UITextField. Nawiasem mówiąc, File'sOwner lub właściciel pliku nie jest niczym więcej niż naszą klasą kontrolera ...

Powtarzamy operację z etykietą, odnosząc ją do naszej etykiety zmiennej kontrolera. A z przyciskiem to coś innego. W tym przypadku powiążemy to z naszą operacją updateText, ale dla konkretnego zdarzenia. Wykonaj tę operację za pomocą zdarzenia „Retusz w środku” i wybierz naszą metodę updateText:

W ten sposób powiązaliśmy już kontrolki, które zdefiniowaliśmy za pomocą Konstruktora interfejsów, oraz zmienne, które wprowadziliśmy w kontrolerze. Zamykamy Interface Builder zapisując wszystko i przechodzimy do ostatniego kroku wracając do XCode.

Krok 5. Najnowsze osiągnięcia.

W XCode otwieramy HelloWorldViewController.m i umieszczamy następujący kod, aby nasza klasa wyglądała tak:

Jeśli przyjrzymy się uważnie, dodamy po prostu blok @synthesize i implementację metody zadeklarowanej w interfejsie .h, updateText. Poniżej tego kodu będziesz mieć dużo skomentowanego kodu.

Linia @synthesize robi coś podobnego do generowania typowego gettera/settera (akcesorów/mutatorów) typowego dla języków OO (encapsulation). Potrzebujemy ich, aby kontroler otrzymał zawartość np. pola tekstowego.

Metoda updateText jak widać po prostu aktualizuje tekst naszej etykiety o zawartość pola tekstowego. Skończyliśmy.

Teraz po prostu robimy Build & Go, a zobaczysz, że po wprowadzeniu ciągu tekstowego i kliknięciu przycisku zawartość etykiety zostanie zaktualizowana. W kolejnym artykule wprowadzimy ulepszenia do naszej aplikacji.


Obserwuj nas w Wiadomościach Google

Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.

  1.   Piotr powiedział

    Bardzo dobry tutorial, bardzo przejrzysty i prosty.

  2.   rubdottocom powiedział

    Cóż, muszę być bardzo melonowa 🙁 bo na mnie to nie działa. Przechwyciłem wartość w ciągu znaków i pobiera tekst, ale nie przypisuje go do etykiety, przynajmniej jej nie maluje, ponieważ próbuję zobaczyć etykietę.tekst i mówi mi to poza zakresem ...

  3.   leo2279 powiedział

    Twoje samouczki są doskonałe, ten rozwój dla iPhone'a jest naprawdę bardzo dobrze wyjaśniony, mam nadzieję, że będziesz publikować więcej samouczków.

    pozdrowienia

  4.   Mariano powiedział

    Cześć, wszystko fajnie, ale nie działa. Aby to zadziałało, musiałem powiązać widok w konstruktorze interfejsu z widokiem w kostce, tak jak uczysz się robić z polem tekstowym i etykietą. Za resztę serdecznie dziękuję.