Чтобы создать из кода родительские/дочерние отношения между двумя контроллерами представления, в основном это просто вопрос выполнения чего-то вроде:
[self addChildViewController:childViewController];
[self.view addSubview:childViewController.view];
где self — родительский контроллер представления.
Но, что, если я хочу полностью создать такое же отношение из Interface Builder?
Или, другими словами: есть ли способ воссоздать поведение метода addChildViewController с помощью Interface Builder? Я не нашел много документации по этому поводу, вот старый неразрешенный пост на эту тему: https://devforums.apple.com/message/455758#455758
Без правильной настройки отношения addChildViewController ни один из методов поворота не перенаправляется на мой дочерний контроллер представления, отсюда и мой вопрос.
Вот что я сделал в IB:
- перетащите объект «Контроллер представления» из панели «Библиотека объектов» на панель «Объекты»
- в инспекторе удостоверений я изменил его класс на свой подкласс UIViewController ("Контроллер представления элементов")
- подключил вьюшку к контроллеру
- подключил все остальные необходимые розетки к контроллеру (имя списка, табличное представление)
Первый объект «Вид» на картинке — это вид моего родительского контроллера представления, вместо этого выделенный «Вид» — это вид дочернего контроллера представления («Контроллер представления элементов»).
Контроллер контейнера также сохраняет свой дочерний экземпляр через дополнительный IBOutlet:
@property (nonatomic, strong) IBOutlet ItemsViewController *itemsViewController;
Спасибо
Обновление 1: если я вручную устанавливаю отношение родитель/потомок в viewDidLoad контроллера контейнера, все методы поворота правильно перенаправляются дочернему элементу.
[self addChildViewController:self.itemsViewController];
Но я действительно не уверен, что это правильный способ сделать это, так как я хотел бы сделать все, используя IB.
Обновление 2: благодаря @micantox за его подсказку использовать «Контейнерное представление» в библиотеке объектов, я преобразовал свой xib-файл в раскадровку, и теперь дочерний контроллер представления добавлен к его родительскому, поэтому мне не нужно добавлять его вручную из кода с помощью addChildViewController, а методы поворота перенаправляются, как и ожидалось.
«Представление контейнера» в основном реализует встраивание перехода и поддерживается только в iOS 6.
Это обновленный снимок экрана из моей раскадровки: