Класс UIViewController обеспечивает базовую модель управления представлениями в iOS. Обычно вы не будете вызывать объекты класса UIViewController напрямую. Вместо этого, вы обращаетесь к подклассам UIViewController в зависимости от необходимости в выполнении той или иной задачи, реализуемой подклассами. Контролер представлений управляет набором представлений, являющихся частью интерфейса вашего iOS приложения. Входя в слой контроллеров, контроллер представлений сопоставляет свои усилия с объектами модели и другими объектами контроллера —включая другие контроллеры представлений—так что ваше приложение имеет единый согласованый пользовательский интерфейс.

Контроллер представлений применяется, когда вам необходимо:

  • изменять размеры и отображать представления
  • настраивать содержимое представлений
  • действовать от имени представления когда пользователь взаимодействует с ним

Контроллеры представлений тесно связаны с самими представлениями, которыми они управляют и принимают участие в цепочке responder chain используемой для обработки событий. Контроллеры представлений являются потомками класса UIResponder и находятся в цепочке ответчиков (responder chain) между управляемым корневым представлением (root view) и его суперпредставлением (superview), который обычно принадлежит другому контроллеру представлений. Eсли представление контроллера представлений не может обработать событие, контроллер может сам обработать событие или передать его в суперпредставление (superview).

Контроллеры представлений редко используется в изоляции. Вместо этого, вы будете использовать несколько контроллерв представлений, каждый из которых отвечат за часть пользовательского интерфейса. Например, один контроллер представлений может управлять таблицей элементов, тогда как другой управляет отображением выбранного элемента данной таблицы. Каждый контроллер представлений отображает свое собственное представление для отображение содержимого, за которое он отвечает.

О подклассах

Приложение содержит по крайней мере один пользовательский подкласс UIViewController’а, но чаще всего несколько. Эти пользовательские подклассы определяют специфичекое для вашего приложения поведение, такие как обработка взаимодействий пользователя с представлениями подклассов. Чуть ниже будет приведен краткий обзор некоторых задач, которыей ваши подклассы могли бы реализовывать. Для более полного изучения того, как применять ваши кастомные подклассы, читайте View Controller Programming Guide for iOS.

Управление представлениями

Когда вы определяете новый подкласс UIViewController, вы должны указать представления, которыми будет управлять контроллер. Типичная иерархия представлений состоит из представлений с гибкими границами и одного или несколькими  дочерних представлений (subview) которые обеспечивают фактическое содержимое. Размер и позиция корневого представления (root view) обычно определяется другим объектом, который владеет контроллером представлений (view controller) и отображает его содержимое. Контроллер представлений определяет позиции любого дочернего представления, которым он владеет, на основе размеров предоставленных корневым представлением владеемого объекта. Контроллер представлений обычно является владением окна (window) или другого контроллера представлений. Eсли контроллером владеет объект window, то он действует как корневой контроллер представлений данного окна. Корневое представление контроллера добавляется как дочернее представление окна и подгоняется по размерам под окно. Eсли контроллером представлений владеет другой контроллер представлений, тогда родительский контроллер определяет когда и как отображать контент дочернего контроллера.

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

  • Вы можете указать представления для контроллера представлений используя storyboard созданный в Interface Builder. Storyboard содержит преднастроенные контроллеры представлений и связанные с ними представления и является предпочтительным способом для разработки пользовательского интерфейса приложения. Ключевым преимуществом Storyboard является то, что он может выражать отношения между различными контроллерами представлений в вашем приложении. Например, вы можете утверждать, что содержание одного контроллера представлений, содержится внутри другого контроллера представлений или, что контроллер представлений отображается как переход (известный как segue) от контроллера представлений. Позволяя видеть отношения между контроллерами представлений, storyboard облегчает восприятие поведения вашего приложения с первого взгляда.  Во время выполнения, контроллер представлений использует storyboard для автоматического создания экземпляров представлений и для их настройки. Часто, сам контроллер представлений автоматически создается из перехода прописанного в storyboard. Когда вы определяете содержимое контроллера представлений, вы никогда напрямую не делаете alloc и init объекта контроллера. Вместо этого, когда необходимо программно создать экземпляр контроллера представления, вы делаете это вызывая метод instantiateViewControllerWithIdentifier: у объекта UIStoryboard.
  • Вы можете задать представления для контроллера с помощью nib файла, также созданного в Interface Builder. Как и storyboard, nib файл позволяет создать и настроить набор представлений. Тем не менее, вы не можете легко создать или видеть отношения между контроллерами представлений используя nib файлы, как вы могли бы это сделать при использовании storyboard. Для инициализации объекта контроллера представлений с помощью nib файла, можно использовать метод initWithNibName: bandle: указав имя nib файла (без расширения). Когда контроллеру понадобится загрузить свое представление, он автоматически создаст и настроит представления, используя информацию из nib файле. (Примечание переводчика: С какого-то времени в проектах Xcode вместо бинарных nib файлов стали использоваться xib файлы, по сути являющиеся XML файлами. Эти xib файлы компилируются во время компиляции всего проекта. Вы можете часто встречать расширения этих файлов как .nib или .xib, что для вас по сути не имеет никакого значения)
  • Then, when the view controller needs to load its views, it automatically creates and configures the views using the information stored in the nib file.
  • If you cannot define your views in a storyboard or a nib file, override the loadView method to manually instantiate a view hierarchy and assign it to the view property.

All of these techniques have the same end result, which is to create the appropriate set of views and expose them through the viewproperty.

Important: A view controller is the sole owner of its view and any subviews it creates. It is responsible for creating those views and for relinquishing ownership of them at the appropriate times such as when the view controller itself is released. If you use a storyboard or a nib file to store your view objects, each view controller object automatically gets its own copy of these views when the view controller asks for them. However, if you create your views manually, you should never use the same view objects with multiple view controllers.

When creating the views for your view hierarchy, you should always set the autoresizing properties of your views. When a view controller is displayed on screen, its root view is typically resized to fit the available space, which can vary depending on the window’s current orientation and the presence of other interface elements such as the status bar. You can configure the autoresizing properties in Interface Builder using the inspector window or programmatically by modifying the autoresizesSubviews and autoresizingMask properties of each view. Setting these properties is also important if your view controller supports both portrait and landscape orientations. During an orientation change, the system uses these properties to reposition and resize the views automatically to match the new orientation. If your view controller supports autolayout and is a child of another view controller, you should call the view’ssetTranslatesAutoresizingMaskIntoConstraints: method to disable these constraints.

 

Интересные ссылки:

http://www.imaladec.com/story/add_uinavigationcontroller_project

UIViewController

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.