Третий способ создания экземпляра — с помощью nib-файла. Nib-файл представляет собой файл в созданном приложении, сгенерированный из .storyboard-файла или . xib-файла, в котором вы “рисуете” части пользовательского интерфейса.

Большинство проектов Xcode включают как минимум один . storyboard- или . xib-файл, и, таким образом, большинство приложений содержит как минимум один nib-файл в пакете приложения. Для использования nib-файла последний должен быть явно загружен с использованием некоторого механизма в процессе выполнения приложения. Nib-файл состоит из имен классов вместе с инструкциями для создания и инициализации их экземпляров. Когда в процессе работы приложения nib-файл загружается, эти инструкции выполняются — создаются и инициализируются экземпляры этих классов. Таком образом, работающее приложение генерирует экземпляры на основании того, что вы изначально нарисовали в .storyboard- или . xib-файле.

Предположим, например, что вы хотите, чтобы пользователю было показано представление, в котором имеется кнопка с надписью “Howdy!” Среда Xcode позволяет создать и разместить эту кнопку графически, редактируя .storyboard- или .xib-файл. Для этого вы должны перетащить кнопку из библиотеки объектов, как показано на рис. 5.1. Затем следует поместить ее на свое место и настроить ее заголовок "Howdy!” как показано на рис. 5.2. По сути, тем самым вы создаете чертеж того, как должно выглядеть представление и что в нем должно быть.

При работе приложения выполняется загрузка nib-файла, и чертеж превращается в реальность. Для этого чертеж рассматривается как набор инструкций по созданию объектов. Кнопка, которую вы перетаскиваете на представление, рассматривается как экземпляр класса UIButton. Класс UIButton получает команду создать свой экземпляр. Созданный экземпляр затем инициализируется, располагаясь в позиции, выбранной вами для него во время создания чертежа (переменная frame экземпляра), получая заголовок, который был указан в чертеже (переменная title экземпляра), и выводится на представлении. По сути, загрузка вашего nib-файла эквивалентна приведенному ниже коду (в предположении, что self .view представляет собой ссылку на объект представления).

UIButton* b =//Создание экземпляра
[UIButton buttonWithType:UIButtonTypeSystem];
[b setTitle:0"Howdy!"
forState.-UIControlStateNormal];//Настройка заголовка
[b setFrame: CGRectMake(100,100,52,30)];//Настройка рамки
[self.view addSubview:b]; // Размещение в представлении

 

 Перетягивание кнопки в представление

Рис. 5.1. Перетягивание кнопки в представление

 

 Графическая настройка кнопки

Рис. 5.2. Графическая настройка кнопки

В приведенном исходном тексте экземпляр класса UIButton создается как готовый, с помощью вызова фабричного метода, и затем присваивается переменной Ь. Однако в случае создания экземпляра на основе nib-файла получение экземпляра из nib-файла для присваивания переменной оказывается достаточно сложным делом, предусматривающим значительные подготовительные усилия и использование устройства под названием выход (outlet). Тот факт, что nib-файлы являются источником экземпляров и что эти экземпляры пробуждаются к жизни при загрузке nib-файла, вместе с проблемой присваивания этих экземпляров переменным, является для начинающих программистов неиссякающим источником путаницы. Детально этот вопрос будет рассматриваться в главе 7.


 

 

 

Добавить комментарий