Подтвердить что ты не робот

Что такое контейнер в iOS 5 SDK?

Я смущен тем, почему и когда нам нужно использовать представление контейнера? и как мы можем создать экземпляр вида контейнера по коду?

4b9b3361

Ответ 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, используемый в качестве заполнителя.

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

container view in IB

Это не только один объект - это несколько. Вы получаете представление, контроллер детского представления и "встраивание" segue. Вы можете сами создать их в коде и подключить их соответствующим образом, если хотите.