У меня есть корень UINavigationController
и хочу инициализировать его с экземпляром UITabBarController
, что-то вроде этого:Init UINavigationController с UITabBarController как корень
TabBarController * viewController = [[TabBarController alloc] init];
UINavigationController navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];
self.window.rootViewController = navigationController;
[self.window makeKeyAndVisible];
согласно документации initWithRootViewController:
метода, это плохая идея:
Контроллер вида, который находится в нижней части навигации Стек. Этот объект не может быть экземпляром класса UITabBarController .
Так интересно:
- Почему у нас такое ограничение?
- ... почему это работает и не выбрасывает никаких исключений? Существуют ли какие-либо побочные эффекты такого подхода? Я пытаюсь повторно использовать один контроллер навигации на всех вкладках моего контроллера панели вкладок, и до сих пор код сверху работает очень хорошо.
Что мне нужно, чтобы 1) иметь согласованный NavBar на всех моих вкладках (но с разными названиями и значками слева/справа 2) Некоторые вкладки должны поддерживать разворот навигации 3) Мне не нужна панель вкладок при переключении на более глубокие элементы иерархии экранов.
EDIT
Я просто понял, что Skype для прошивки является хорошим примером того, что я пытаюсь достичь: она работает точно так же, как мое приложение в терминах вкладок и навигации.
Я не знаю технической причины, но мне кажется, что это приведет к запутанному опыту пользователя; Имея контроллер табуляции в корне контроллера навигации, пользователь должен полностью перейти к корню, чтобы переключать вкладки; В общем случае для контроллера панели вкладок вы заметите, что вы вставляете отдельный контроллер навигации на каждую вкладку, тогда пользователь может быстро переключаться между вкладками, не теряя места в стеке просмотров каждой таблицы. – Paulw11
@ Paulw11 благодарит вас за ваш комментарий. В настоящее время я использую один контроллер nav для всех своих вкладок.Я видел аналогичные рекомендации по внедрению каждого UIViewController каждой вкладки в UINavigationController, но ... зачем мне это нужно? Я понимаю концептуальную идею этого подхода, но не могу понять, почему иметь 5 навигационных контроллеров, а не только один ... Что мне нужно, так это 1) иметь согласованный NavBar во всех моих вкладках. 2) На некоторых вкладках есть развертка. – fraggjkee
Как я уже сказал, наличие указателя навигации на вкладку позволяет пользователю быстро переключаться между вкладками, не переходя к корню и поддерживать их иерархическое положение на каждой вкладке. Не похоже, что очень сложно создать 5 навигационных контроллеров. – Paulw11