Главная » iPhone, Objective-C, Программирование для iOS и MacOS » Связывание  представлений- настольное приложение Сосоа

0

Возможности Interface Builder не ограничиваются созданием и настройкой представлений. Разработчик также может объединять объекты представлений с кодом приложения – в частности, определить пары «приемник/действие» и присвоить указатели.

Слева от макетной сетки список «заместителей» (Placeholders) и объектов. Он называется сводкой документа (document outline). (Если вы видите только набор значков без надписей, щелкните на кнопке   , чтобы открыть расширенный список.)

Найдите  в  секции  Placeholders сводки  строку  File’s  Owner.  Заместитель

обозначает некий объект. который не может быть задан до стадии выполнения. Так, File’s Owner обозначает объект, который загрузит данный файл XIB для формирования своего пользовательского интерфейса. В нашем случае File’s Owner представляет экземпляр BNRDocument.

Выберите кнопку Insert в редакторе и перетащите ее на строку File’s Owner,

удерживая клавишу Control.

Рис, 28.10. Сводка документа в свернутом и развернутом виде

Когда вы отпускаете кнопку мыши, на экране появляется маленькое окно с перечнем всех возможных связей. Выберите createNewItem: – тем самым вы выбираете действие, которое должно срабатывать при нажатии кнопки (рис. 28.12)

Рис. 28.11. Создание связи

Рис. 28.12. Выбор действия

Мы настроили пару «приемник/действие». Результат эквивалентен следующему фрагменту кода в iTahDoodle:

[insertButton addTarget:self

action:@selector(addTask:) forControlEvents:UIControlEventTouchUpInside];

Теперь  свяжите  ссылку  itеmТаblеViеw класса  BNRDocument.  Перетащите  с нажатой  клавишей  Control  строку  File’s  Owner  (заменяющую  BNRDocument)  на

NSТаblеViеw и отпустите кнопку мыши. Выберите единственный вариант, который будет предложен: itеmТаblеViеw.

Наконец, щелкните на табличном представлении с нажатыми клавишами Сontrol и Shift, и выберите в списке NSТаblеViеw. Перетащите с нажатой клавишей Сontrol табличное представление на строку File’s Owner и выберите в открывшемся списке связей вариант dataSouгce.

Рис. 28.13. Создание других связей

Рис. 28.14, Связывание источника данных табличного представления

Итак, что же мы только что сделали? Мы присвоили значения указателей. Класс BNRDocument объявляет указатель на NSТаblеViеw. Мы сообщили Interface Builder, что этот указатель должен указывать на конкретный экземпляр NSTablеViеw, который был перетащен в это окно. Кроме того, табличное представление содержит ряд собственных указателей – таких, как dataSource. Мы сообщили Interface Builder, что указатель dataSource табличного представления должен указывать на наш экземпляр BNRDocument. Результат эквивалентен программному назначению источника данных табличного представления в iTahDoodle.

[taskTable setDataSource:self];

Вводя ключевые слова IBOutlet и IBAction, мы помечаем эти ссылки и действия для Interface Builder, говоря: «Когда я пытаюсь связать указатель в IВ, этот объект должен быть включен в список возможных связей!» Во время написания кода Interface Builder следит за ключевыми словами IBOutlet и IBAction и знает, какие варианты следует предлагать при создании связей.

Фактические определения IBOutlet и IBAction тривиальны:

#define IBAction void

#define IBOutlet

Из того, что говорилось ранее о директиве #define, становится ясно, что ключевое слово IBAction заменяется на void еще до того, как его увидит компилятор, а IBOutlet полностью исчезает из программы. Таким образом, на стадии компилирования все метки IBОutlet удаляются полностью, а ключевые слова IBAction заменяются на void, потому что действия, инициируемые элементами управления пользовательского интерфейса, не должны иметь возвращаемого значения.

Учтите, что Элементы пользовательского интерфейса на базе XIB не создаются

явно,  как  это  делалось  при  программном  создании  интерфейса.  Они  создаются автоматически при загрузке ХIВ во время выполнения.

Наконец обратите внимание на отсутствие указателя на кнопку. Дело в том, что объекту нужны переменные экземпляров только для тех объектов, которым он собирается отправлять сообщения. Кнопка должна отправлять сообщения экземпляру BNRDocument, поэтому мы связали ее действие с приемником. Однако экземпляр BNRDocument не собирается отправлять сообщения кнопке, поэтому указатель на кнопку ему не нужен.

Источник: Аарон Хилегас, «Objective-C. Программирование для iOS и MacOS», 2012 г.

По теме:

  • Комментарии