Загрузка UITabBarController из XIB не содержит ничего из XIB - PullRequest
2 голосов
/ 11 февраля 2012

Я работаю над проектом, который начинался как приложение на основе TabBarController, и до сих пор в основном так и есть, но некоторые требования изменились, и нам нужно поместить контроллер начального представления в качестве точки входа в остальную часть приложения - тот, который после аутентификации и загрузки некоторых вещей будет заменен в главном окне контроллером панели вкладок.

Оригинальный UITabBarController был компонентом MainWindow.xib, и все его корневые навигационные контроллеры были настроены с корневыми контроллерами представления, и все шло хорошо. Я решил, что могу просто извлечь этот компонент UITabBarController из MainWindow.xib, поместить его в собственный CustomTabBarController.xib, а затем запустить

[self setTabBarController:[[[UITabBarController alloc] initWithNibName:@"CustomTabBarController" bundle:nil] autorelease]];
[_tabBarController setDelegate:self];
[self.window addSubview:_tabBarController.view];

Однако вместо того, чтобы получить готовый контроллер панели вкладок, который я ожидал, я получаю полностью пустой контроллер панели вкладок.

Я что-то упустил? Почему я не могу загрузить готовый UITabBarController из пера?

1 Ответ

5 голосов
/ 11 февраля 2012

Попробуйте вместо этого:

NSArray *nibContents = [[NSBundle mainBundle] loadNibNamed:@"CustomTabBarController" owner:nil options:nil];
UITabBarController *controller = [nibContents objectAtIndex:0];

[self setTabBarController:controller];
[_tabBarController setDelegate:self];
[self.window addSubview:_tabBarController.view];

Довольно сложно объяснить, почему, но это связано с тем, как работает владелец файла. Если в панели пера определен контроллер панели вкладок, вы не можете загрузить файл пера в контроллер панели вкладок.

Перья всегда должны быть загружены объектом на один уровень выше объекта, определенного в кончике, поэтому делегат приложения может загрузить контроллер представления, контроллер представления может загрузить представление и т. Д. Но контроллер представления (включая TabBarController) ) не может загрузить себя.

...