Ссылка IBOutlet на встроенный контроллер просмотра
У меня сложный вид iPad, которым я управляю, имея несколько контроллеров представлений. Я ранее (до iOS6/XCode 4.5) сделал это, выделив мои контроллеры представлений в коде и подключив к ним различные представления, хотя ссылки на основной вид.
Что я хотел бы сделать, это использовать новые представления контейнеров для встраивания контроллеров представления в файл раскадровки. Кажется, я не могу сделать ссылку IBOutlet на встроенный контроллер просмотра на главный контроллер.
Можно ли это сделать? Или получить встроенный контроллер через тег или что-то в коде?
Этот вопрос ОСОБЕННО касается использования представлений контейнера
Ответы
Ответ 1
Я не уверен, что вы подразумеваете под "извлечением встроенного контроллера". Когда вы хотите использовать контроллер, вы используете метод UIStoryboard instantiateViewControllerWithIdentifier:, используя идентификатор, который вы передаете контроллеру в IB. Вы также можете использовать метод performSegueWithIdentifier: sender: (который также создавал экземпляр контроллера представления). Вы должны ознакомиться с разделом "Использование контроллеров просмотра в вашем приложении" в документах Apple. Он также ссылается на то, что контроллеры детского представления создаются одновременно с контроллером контейнера.
После редактирования: если вы вставляете представление контейнера в другой контроллер представления, этот встроенный контроллер представления можно ссылаться от содержащего контроллера с self.childViewControllers(который будет массивом, поэтому, если есть только один, вы можете получить его с lastObject).
Ответ 2
Другой вариант для некоторых случаев - захватить встроенный контроллер с помощью -prepareForSegue:sender:
.
Например, если у меня есть UINavigationController
, встроенный в CustomContainerViewController
, я могу называть segue embedContentStack
в раскадровке и записывать его в CustomContainerViewController
через
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
if ([segue.identifier isEqualToString:@"embedContentStack"]) {
// can't assign the view controller from an embed segue via the storyboard, so capture here
_contentStack = (UINavigationController *)segue.destinationViewController;
}
}
Ответ 3
Вот еще один вопрос: Контроллер просмотра контейнера доступа из родительского iOS
Они предлагают сохранить ссылку в prepareForSegue или искать встроенный viewController в self.childViewControllers