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

Ссылка IBOutlet на встроенный контроллер просмотра

У меня сложный вид iPad, которым я управляю, имея несколько контроллеров представлений. Я ранее (до iOS6/XCode 4.5) сделал это, выделив мои контроллеры представлений в коде и подключив к ним различные представления, хотя ссылки на основной вид.

Что я хотел бы сделать, это использовать новые представления контейнеров для встраивания контроллеров представления в файл раскадровки. Кажется, я не могу сделать ссылку IBOutlet на встроенный контроллер просмотра на главный контроллер.

Можно ли это сделать? Или получить встроенный контроллер через тег или что-то в коде?

Этот вопрос ОСОБЕННО касается использования представлений контейнера

4b9b3361

Ответ 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;
    }
}