Структура документа иерархически отображает отношения между объектами в nib-файле и немного отличается в зависимости от того, какой файл редактируется — . storyboard или .xib.

Основным содержанием файла раскадровки являются сцены (scenes). Грубо говоря, сцена — это контроллер одного представления и некоторый вспомогательный материал; на верхнем уровне каждой сцены находится контроллер одного представления.

Контроллер представления — это не объект интерфейса, но он управляет объектом интерфейса, а именно его представлением (или главным представлением). Контроллер представления в nib-файле не обязан иметь свое главное представление в том же самом nib-файле, но обычно так и происходит, и в этом случае на канве в nib-редакторе представление обычно появляется в контроллере представления. Так, на рис. 7.1 большой голубой прямоугольник на канве — это главное представление контроллера, которое находится в этом контроллере. Сам контроллер изображается на канве в виде прямоугольника, содержащего представление вместе с черным закругленным прямоугольником, расположенным под ним. Этот закругленный прямоугольник называется доком сцены (scene dock). Его легче увидеть, если выделить контроллер представления, как показано на рис. 7.2; контроллер представления и его док сцены выделяются вместе и окаймляются жирной голубой линией.

 

 Выделенный контроллер представления в раскадровке

Рис. 7.2. Выделенный контроллер представления в раскадровке

 

Каждый контроллер представления в файле раскадровки вместе со своим представлением и его доком сцены образует сцену. Эта сцена также изображается в виде иерархической коллекции имен в структуре документа. На верхнем уровне структуры документа находятся сами сцены. Верхний уровень каждой сцены состоит из имен, обозначающих объекты в доке сцены контроллера представления: сам контроллер представления, два прокси-объекта, токены First Responder и Exit. Эти объекты представлены в доке сцены в виде пиктограмм и отображаются на верхнем уровне сцены в структуре документа.

Объекты, перечисленные в структуре документа, разделяются на два вида.

 

Nib-объекты

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

 

Прокси-объекты

Прокси-объекты (в данном случае токены First Responder и Exit) не представляют собой экземпляры, которые появляются из nib-файла при его загрузке. Они представляют вспомогательные объекты, предназначенные для обеспечения связи между nib-объектами и другими объектами (примеры будут приведены чуть позже). Прокси-объекты нельзя создавать и удалять, так как nib-редактор делает это автоматически.

 

Помимо объектов верхнего уровня, большинство объектов, перечисленных в структуре документа раскадровки, иерархически зависят от контроллера представления сцены. Например, на рис. 7.1 контроллер имеет главное представление (оно показано как представление, иерархически зависящее от контроллера представления). Это разумно, потому что это представление принадлежит этому контроллеру. Более того, любые другие объекты интерфейса, которые мы перетащим на канву главного представления, будут перечислены в этой структуре документа как иерархически зависящие от данного представления. Это также разумно. Представление может содержать другие представления (его дочерние представления), и само может содержаться в другом представлении (его родительском представлении). Представление может содержать много дочерних представлений, которые сами могут содержать свои дочерние представления. Однако каждое представление может иметь только одного родителя. Таким образом, существует иерархическое дерево дочерних представлений, содержащихся в единственном объекте, находящемся на вершине. Это дерево изображается структурой документа (как структура!).

В файле . xib нет сцен. Объекты сцены, которые находятся на верхнем уровне в файле . storyboard, становятся объектами верхнего уровня в самом nib-файле. Нет никаких правил, требующих, чтобы объектами верхнего уровня были контроллеры представлений; они могут ими быть, но часто объектами интерфейса верхнего уровня в файле . xib являются представления. Ими могут быть главные представления контроллера представления, но и это не обязательно. На рис. 7.3 показан файл . xib со структурой, параллельной отдельной сцене на рис.

 

Файл .xib, содержащий представление

Рис. 7.3. Файл .xib, содержащий представление

 

Структура документа, показанная на рис. 7.3, содержит три объекта верхнего уровня. Два из них являются прокси-объектами, которые называются шаблонами File’s Owner и First Responder. Третий объект является реальным. Это представление, которое будет создано при загрузке nib-файла во время выполнения приложения. Структуру документа в файле . xib невозможно скрыть полностью; она сворачивается в набор пиктограмм, представляющих nib-объекты верхнего уровня, аналогично доку сцены в файле раскадровки. Этот набор часто просто называют доком (рис. 7.4).

Док в файле .xib

Рис. 7.4. Док в файле .xib

Пока структура документа выглядит необязательной, потому что ее иерархия слишком простая; все объекты на рис. 7.1 и 7.3 легко доступны на канве. Однако, если раскадровка содержит много сцен, а представление содержит много иерархически организованных объектов (вместе с их структурными ограничениями), структура документа становится очень полезной, позволяя делать обзор содержимого nib-файла в виде удобной иерархической структуры, с помощью которой можно найти и выбрать требуемый объект. Иерархию можно перестраивать; например, если объект дочернего представления относится к неправильному родительскому представлению, его можно переместить в структуре, просто перетащив его имя. Кроме того, объекты можно выделять с помощью панели быстрых переходов, расположенной в верхней части редактора: последний компонент этой панели — <Control+6> — является иерархическим всплывающим меню, дублирующим структуру документа.

Если имена nib-объектов в структуре документа кажутся неинформативными, можете изменить их. С формальной точки зрения имя — это метка, не имеющая специального смысла, поэтому nib-объектам можно присваивать любые метки. Выберите метку nib-объекта в структуре документа и нажмите клавишу <Return>, чтобы сделать его редактируемым, или выберите объект и отредактируйте поле Label в разделе Document инспектора идентичности (<Command+Option+3>).


 

 

 

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