2012-03-30 3 views
3

Я создал представление в Interface Builder с некоторыми ярлыками и текстом как IBOutlets. Я отлично вижу этот экран, когда перехожу к нему из другого представления, которое я определил в своей раскадровке. Однако у меня есть еще один XIB и связанный с ним UIViewController, с которым я хочу получить доступ к этому представлению. Поскольку мой XIB не находится в Раскадке, я не могу его отложить. Вместо этого я должен выполнить переход программно.iOS - Разъемы интерфейса не инициализированы

PlantDetailViewController *plantDetailVC = [[PlantDetailViewController alloc] init]; 
    [self.currentNavigationController pushViewController:plantDetailVC animated:YES]; 

Когда этот код выполнен, он переходит к представлению, но вид просто пуст. Я отлаживал код, и он входит в viewDidLoad и viewWillAppear, однако все мои IBOutlets - это NIL .... поэтому ничего не появляется на экране!

Может ли кто-нибудь сказать мне, почему они могут быть NIL и как я могу их инициализировать?

Благодаря

Brian

ответ

0

-init не загружает файл острия для вас, если вы хотите загрузить использование острия -initWithNibName:bundle:

При использовании соглашения об именах NIB вы можете передать nil загрузить нить, чье имя соответствует вашему классу и пакету по умолчанию, то есть [[PlantDetailViewController alloc] initWithNibName:nil bundle:nil], подробности см. в документах для -nibName.

+0

Спасибо за ответ Ионы. Однако у меня нет NIB для представления, которое я пытаюсь загрузить. Вид определен в раскадровке, и из того, что я понимаю, нет файлов NIB в Storyboard. Поверните меня, если я ошибаюсь. –

+2

Вызов метода 'init'' UIViewController аналогичен вызову 'initWithNibName: nil bundle: nil'. Если есть наконечник с тем же именем, что и класс контроллера представления (или то же имя без слова 'Controller' в конце), контроллер представления загрузит этот nib в' loadView'. –

2

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

Допустим, ваша раскадровка называется MainStoryboard.storyboard.

Во-первых, вам нужно установить идентификатор PlantDetailViewController в своем раскадровке. Вы делаете это в инспекторе атрибутов в разделе «Вид контроллера». Предположим, вы установили его в PlantDetail.

Затем в OtherViewController, это должно работать:

UIStoryboard *storyboard = [UIStoryboard storyboardWithName:@"MainStoryboard" bundle:nil]; 
PlantDetailViewController *vc = [storyboard instantiateViewControllerWithIdentifier:@"PlantDetail"]; 
[self.currentNavigationController pushViewController:vc animated:YES]; 
Смежные вопросы