Ответ 1
Хорошо понял. Это решение относится к iOS 5, поскольку эта функция была добавлена. Этот метод работает с раскадными версиями.
Настройка: цель состоит в том, чтобы разместить один вид контроллеров представления и логику в другом контроллере.
-
Поскольку нет встроенного способа ссылки на контроллер дочернего представления в раскадровке, нам нужно дать контроллеру представления имя. Это можно сделать, заполнив атрибут "Идентификатор" на контроллере в раскадровке. ПРИМЕЧАНИЕ. Убедитесь, что вы даете контроллеру идентификатор, а не вид контроллеров.
-
Создайте экземпляр контроллера, который хотите скопировать. Это можно сделать с помощью хост-контроллера.
UIViewController *controller = [self.storyboard instantiateViewControllerWithIdentifier:@"ControllerIdentifier"];
-
Добавить дочерний контроллер в родительский контроллер
[self addChildViewController: controller];
-
Добавить представление дочерних контроллеров в представление родительских контроллеров. Обратите внимание, что если в родительском контроллере есть представление владельца места размещения, к которому вы хотите добавить дочерний вид, тогда вы это сделаете. Здесь я добавляю его в UIView, который называется stage в родительском контроллере.
[self clearStage]; [self.stageView addSubview:controller.view]; presentedController.view.frame = self.stageView.bounds;
И это все. Довольно просто. Я успешно использовал его с коммутационными контроллерами и просмотром в домашнем элементе управления вкладками. Подконтроллер подключает свои представления в жизненном цикле просмотра, поэтому viewDidLoad
и т.д. Все работают как ожидается в этом контроллере детского представления.
Надеюсь, это поможет кому-то.