2015-06-03 2 views
0

У меня есть контроллер вида, который имеет два контейнера. У меня есть контроллеры представлений для каждого из этих контейнеров. Эти три диспетчера представлений находятся в разных досках. Как программно добавить два контроллера представления в два контейнера?Программно добавляя два контроллера представления в два вида контейнера

ответ

0

Сначала вы должны получить раскадровки. Для того чтобы сделать это, вы должны использовать UIStoryboard класса

UIStoryboard *firstStoryboard = [UIStoryboard storyboardWithName: @"FirstStoryboardName" bundle: nil]; 
UIStoryboard *secondStoryboard = [UIStoryboard storyboardWithName: @"SecondStoryboardName" bundle: nil]; 
UIStoryboard *thirdStoryboard = [UIStoryboard storyboardWithName: @"ThirdStoryboardName" bundle: nil]; 

Далее вам необходимо получить исходные контроллеры Скрин этих раскадровок (предполагая, что вид контроллера firstStoryboard содержит эти два контейнера)

UIViewController *secondVC = (UIViewController *)[secondStoryboard instantiateInitialViewController]; 
UIViewController *thirdVC = (UIViewController *)[thirdStoryboard instantiateInitialViewController]; 

Теперь добавьте эти два контроллера отображения в контейнерах в контроллере вида, который содержит контейнеры

UIViewController *firstVC = (UIViewController *)[firstStoryboard instantiateInitialViewController]; 
// TODO: Add secondVC and thirdVC as the children of firstVC 
0

вы можете обратиться к другому раскадровки через

[[UIStoryboard storyboardWithName:@"MainStoryboard_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"secondVCSrorybradID"]; 

и вы должны дать VC, что вы хотите создать идентификатор.

И чем вы могли бы добавить его в любой кадр с addSubview:

0

Так что, чтобы ответить на ваш вопрос о добавлении g контроллеры представлений в контейнеры ... Контейнерные представления - это простой способ добавить контроллеры дочерних представлений в построитель интерфейса с помощью segues.

Чтобы сделать это программно, сначала создайте контрольные контроллеры представления из каждой соответствующей раскадровки (см. Ответ Ch0k018).

Контроллеры представлений, которые находятся в представлениях контейнера, затем должны быть добавлены в качестве контроллеров детского вида на главный контроллер представления. Вы можете прочитать о сдерживании здесь https://developer.apple.com/library/ios/featuredarticles/ViewControllerPGforiPhoneOS/CreatingCustomContainerViewControllers/CreatingCustomContainerViewControllers.html

// Add the child view as subview 
childViewController.view.frame = self.containerView.bounds; 
[self.containerView addSubview:childViewController.view]; 
// Need to call these methods to complete 
[self addChildViewController:tableViewController]; 
[childViewController didMoveToParentViewController:self]; 

От компании Apple документы:

Вот что делает этот код:

Он называет контейнера addChildViewController: метод добавления ребенка. Вызов метода addChildViewController: также вызывает метод willMoveToParentViewController для ребенка: метод автоматически. Он обращается к свойству вида child для извлечения представления и добавляет его в свою собственную иерархию представлений. Контейнер устанавливает размер и положение ребенка перед добавлением вида; контейнеры всегда выбирают, где отображается содержимое ребенка. Хотя этот пример делает это, явно устанавливая фрейм, вы также можете использовать ограничения компоновки, чтобы определить позицию представления. Он явно вызывает дочерний метод didMoveToParentViewController: метод, чтобы сигнализировать о завершении операции.

Смежные вопросы