Я смущен тем, почему и когда нам нужно использовать представление контейнера? и как мы можем создать экземпляр вида контейнера по коду?
Что такое контейнер в iOS 5 SDK?
Ответ 1
Вид контейнера представляет собой представление, которое можно перетащить в один из ваших контроллеров представлений, который у вас уже есть в вашем раскадровке (мы будем называть этот viewControllerA). Вы автоматически получаете контроллер вида, подключенный к этому виду через встроенный сегмент. Этот новый контроллер просмотра имеет свой набор кадров, так что он будет иметь тот же размер, что и представление контейнера - если вы измените размер представления контейнера, контроллер также автоматически изменит размер. Итак, если вы хотите, вы можете перетащить несколько видов контейнера в viewControllerA, и каждый из них будет иметь свой собственный контроллер представления. В коде, если вам нужно получить доступ к этим встроенным контроллерам представлений, к ним можно получить доступ из viewControllerA.childViewControllers - это даст вам массив любых встроенных контроллеров представлений, которые у вас есть.
Существует обсуждение этих представлений контейнеров в видеоролике сеансов WWDC 2012 Session под названием "Принятие раскадровки в вашем приложении".
Ответ 2
Я смущен тем, почему и когда нам нужно использовать представление контейнера?
Когда люди говорят о представлениях контейнера, они обычно означают просто старый UIView, который содержит другие представления. Использование этого вида позволяет перемещать все представления, содержащиеся в группе, так что их позиции относительно друг друга поддерживаются. Это также упрощает скрытие всех содержащихся представлений в виде группы.
и как мы можем создать экземпляр вида контейнера по коду?
Точно так же, как вы обычно создаете UIView из кода:
CGRect frame = CGRectMake(someX, someY, someWidth, someHeight);
UIView *container = [[UIView alloc] initWithFrame:frame];
После этого вы, вероятно, захотите добавить некоторые подзоны в контейнер и, в конечном счете, добавить контейнер в качестве подсмотра вашего представления контроллера вида.
Кроме того, обратите внимание, что мы говорим о представлениях и не рассматриваем контроллеры здесь. Люди также говорят о контроллерах контейнерных представлений, с помощью которых они подразумевают контроллеры представлений, которые могут управлять другими контроллерами представлений. UITabBarController, UINavigationController и UISplitViewController являются примерами контроллеров контейнерных представлений, предоставляемых iOS. Вы можете создать свой собственный, если хотите, но это тема для другого вопроса.
Обновление: Из вашего комментария вы, видимо, задаетесь вопросом об элементе "Контейнер" в редакторе раскадровки. Если вы перетащите его в представление, вы увидите, что:
-
Само представление представляет собой UIView, используемый в качестве заполнителя.
-
Наряду с представлением редактор создает область, в которой вы можете редактировать контент, управляемый контроллером дочернего представления. См. Рисунок ниже.
Это не только один объект - это несколько. Вы получаете представление, контроллер детского представления и "встраивание" segue. Вы можете сами создать их в коде и подключить их соответствующим образом, если хотите.