2013-03-05 2 views
0

У меня есть TabBarController внутри SplitViewController в разделе подробностей.TabBarController.selectedView is null

В классе TabBarController я хочу получить ссылку на представленное в настоящее время представление в TabController.

Я пробовал self.selectedViewController и self.presentedViewController, и они оба являются нулевыми. Я тестирую их в viewDidLoad для TabBarController.

Это подходящее место? Могу ли я называть их рано (то есть до того, как вид на выбранной вкладке установлен?)

Благодаря

Джеймс

ответ

0

Во-первых, не используйте presentedViewController в этом случае. То есть для получения ссылки на контроллер представления, который вы представили по модулю, - selectedViewController - это то, что вам нужно.

Да, viewDidLoad будет неправильным местом для получения ссылки на выбранный контроллер просмотра, поскольку он еще не существует.

создается контроллер панели вкладок в два этапа:

Во-первых, вы создаете свой экземпляр. Это тот момент, когда вызовы будут вызываться методом alloc, init и вашим жизненным циклом.

Во-вторых, вы задаете массив контроллеров.

Если вы пытаетесь получить ссылку в viewDidLoad, вы пытаетесь получить ссылку на первом этапе, прежде чем назначить контроллеру панели вкладок массив контроллеров представлений.

Что вы должны сделать, это создать собственный метод, который можно отключить в вашем контроллере панели вкладок, который вы вызовете из класса, который создает контроллер панели вкладок. Просто убедитесь, что вы вызываете этот метод после того, как вы назначили массив контроллеров представлений контроллеру панели вкладок. Тогда вы сможете получить действительную ссылку с помощью selectedViewController в рамках своего настраиваемого метода.

Редактировать: Для раскадровки, переместите код в viewDidAppear - viewDidLoad вызывается до того, как вид будет виден, и, следовательно, контроллер выбора еще не выбран. В viewDidAppear используйте selectedViewController (не представленViewController), и он будет содержать действительную ссылку в этой точке.

+0

Должен ли я использовать здесь метод segue? он не звучит правильно, поскольку контроллер табуляции не будет настроен на данный момент - или это будет? как я настраиваю все через раскадровку, я не назначаю явный массив контроллеров представлений. –

+0

если я добавил метод say (UIViewController *) getSelectedView в класс контроллера вкладки, я мог бы это назвать, но все равно не знаю, в какой момент я должен его назвать –

+0

Я вижу, я не понимал, что мы используем раскадровки , В этом случае вам нужно переместить код в viewDidAppear, а не viewDidLoad - viewDidLoad вызывается до того, как вид будет виден, и, следовательно, контроллер пока не выбран. Опять же, убедитесь, что вы используете selectedViewController, а не представленViewController, и до тех пор, пока вы это делаете из viewDidAppear, он должен содержать действительную ссылку. – petemorris