Разработване на iPhone (5): първото ни приложение (III)

En предишната ни статия бяхме включили етикет, TextField и бутон в интерфейса на нашето приложение. Искахме съдържанието на етикета да бъде актуализирано с въведеното в TextField при щракване върху бутона. Бяхме (стъпка 1) създадохме проекта и (стъпка 2) използвахме InterfaceBuilder за дефиниране на екрана. Сега ще продължим с останалите стъпки, за да оставим приложението да работи.

Стъпка 3. Създайте променливи в ViewController.

Ние имаме нашия интерфейс правилно. Всъщност, ако направихме Build & Go, можехме да видим как изглежда:

Но очевидно нищо не се случва при натискане на бутона, защото не сме направили минимално необходимото развитие. В тази стъпка 3 ще въведем променливите и методите в HelloWorldViewController, както в интерфейса (.h файл), така и в изпълнението (.m файл). За да направим това, както посочихме в края на предишната публикация, трябва да знаем, че TextField отговаря на клас UITextField, а етикетът на клас UILabel. Тези 2 класа са в рамките на UIKit.

Ако не сме затворили и запазили Interface Builder, ние го правим и в XCode отваряме файла HelloWorldViewController.h. Кодът в момента ще има нещо подобно:

Вече разглеждаме някои Objective-C. В този код виждаме декларация за импортиране на библиотеката UIKit, където са класовете UILabel и UITextField. Виждаме как се декларира интерфейсът и че той се простира от общия UIViewController на UIKit.

В рамките на интерфейсния код включваме следния код:

Сега можем да обясним какво сме направили:

  • Декларирахме в блока @interface 2 атрибути от типа UILabel и UITextField, съответно с 2 имена на променливи * label и * textField. Напред се появява IBOutlet. Какво е всичко това? Ние се обясняваме. IBOutlet не е тип променлива; е директива, която помага на Interface Builder да знае съществуването на тези променливи от типа UILabel и UITextField. Между другото, не забравяйте, че в предишната статия ви бяхме дали трик да познавате променливите типове на контролните обекти (бутони, етикет, текстово поле и т.н.) в Interface Builder. От друга страна, проблемът с * пред името на променливата може да изненада Java програмистите, не толкова тези на C ... но научете, че така ще пишете променливи на екземпляра в Objective-C.
  • Декларират се свойствата UILabel и UITextField. неатомични и запазени засега няма да видим, това е свързано с управление на паметта.
  • Виждаме, че декларираме метод updateText. Има знак - пред себе си, указващ, че това е метод на екземпляр, а не метод на клас (знакът + е обяснен за тях). Не можем да обясняваме това, защото това е основно обектно-ориентирано програмиране ... Този метод не връща нищо (т.е. void) и получава параметър от тип id. По същество се отнася до идентификатора на обекта, който ще предизвика извикването на нашия метод updateTexto, който ще актуализира стойността на етикета. Можем да предположим, тъй като този контрол ще бъде самият бутон ...

След като това стане, ние приключихме със стъпка 3.


Стъпка 4. Свържете контролите за изглед с променливите на контролера.

Ако прегледаме, от една страна разработихме нашия интерфейс с Interface Builder, а от друга имаме променливите, свързани с тези контроли в HelloWorldViewController.h (интерфейс на класа на контролера HelloWorldViewController.m). Все още обаче няма връзка между изгледа и контролера, тоест не сме дали никакви инструкции за свързване, например, на текстовото поле, което проектираме в Interface Builder, с променливата от типа UITextField, която сме поставили в клас. Сега ще изпълним тази задача. Отваряме Interface Builder отново, като щракваме върху HelloWorldViewController.xib, щракваме върху текстовото поле и в палитрата Inspector отиваме на втория раздел (Text Field Connections). Виждаме, че има раздел, наречен Referencing Outlets, без да има нищо маркирано. Това означава, че в момента Interface Builder не познава никаква връзка между това текстово поле и IBOutlet (Interface Builder Outlet) на клас ... но имаме UITextField IBOutlet в нашия HelloWorldViewController, така че ще го свържем.

За да направите това, както виждаме на фигурата, като щракнете върху малкия кръг до «New Referencing Outlet», плъзгаме до собственика на файла на прозореца, наречен HelloWorldViewController.xib. Това ще ни позволи да изберем 2 опции, view (пълен изглед) и textField (нашата променлива). Очевидно ние избираме textField и по този начин свързваме нашето текстово поле с променливата от неговия тип UITextField. Между другото, собственикът на файла или собственикът на файла не е нито повече, нито по-малко от нашия клас контролер ...

Повтаряме операцията с етикета, свързвайки го с етикета на нашата променлива на контролера. А с бутона това е нещо различно. В този случай ще го свържем с нашата операция updateTexto, но за конкретно събитие. Направете това със събитието „Touch Up Inside“ и изберете нашия метод updateTexto:

И по този начин вече сме свързали контролите, които сме дефинирали с Interface Builder и променливите, които сме поставили в контролера. Затваряме Interface Builder, спестявайки всичко и преминаваме към последната стъпка, връщайки се към XCode.

Стъпка 5. Последни разработки.

В XCode отваряме HelloWorldViewController.my и поставяме следния код, така че класът ни да изглежда така:

Ако се вгледаме отблизо, просто сме поставили блока @synthesize и изпълнението на метода, деклариран в интерфейса .h, updateTexto. Под този код ще имате много коментиран код.

Линията @synthesize прави нещо подобно на генерирането на типичния getter / setter (аксесоари / мутатори), типични за езиците OO (капсулиране). Нуждаем се от тях, така че съдържанието да достигне контролера, например, на текстовото поле.

Методът updateTexto, както виждате, просто актуализира текста на нашия етикет със съдържанието на текстовото поле. Готови сме.

Сега просто правим Build & Go и ще видите, че когато въведете текстов низ и щракнете върху бутона, съдържанието на етикета се актуализира. В следващата статия ще представим подобрения в нашето приложение.


Следвайте ни в Google Новини

Оставете вашия коментар

Вашият имейл адрес няма да бъде публикуван. Задължителните полета са отбелязани с *

*

*

  1. Отговорник за данните: AB Internet Networks 2008 SL
  2. Предназначение на данните: Контрол на СПАМ, управление на коментари.
  3. Легитимация: Вашето съгласие
  4. Съобщаване на данните: Данните няма да бъдат съобщени на трети страни, освен по законово задължение.
  5. Съхранение на данни: База данни, хоствана от Occentus Networks (ЕС)
  6. Права: По всяко време можете да ограничите, възстановите и изтриете информацията си.

  1.   Петър каза той

    Много добър урок, много ясен и прост.

  2.   rubdotto.com каза той

    Е, трябва да съм много пъпеш 🙁, защото не ми върши работа. Записал съм стойността в низ и той взема текста, но не го присвоява на етикета, поне не го рисува, защото се опитвам да видя label.text и той ми казва извън обхвата ...

  3.   leo2279 каза той

    Отлични вашите уроци, това наистина много добре обяснява това развитие за iphone, надявам се да продължите да публикувате още уроци.

    отношение на

  4.   Мариано каза той

    Здравейте, страхотно, но не работи. За да работи, трябваше да свържа изгледа на конструктора на интерфейси с изгледа в куба, както учиш да правиш с текстовото поле и етикета. За останалото много благодаря.