Я пытаюсь сделать приложение iPhone с дополнительным навигационным контроллером верхнего уровня.Могу ли я вставить UINavigationController и установить заголовок выше моего экземпляра UITabBarController, установленного в моем приложении appdelegateDidFinishLaunching?
Добавить это нормально, но попытка установить заголовок не работает, если вы не попытаетесь добавить свой собственный элемент навигации, после чего приложение вылетает с «NSInternalInconsistencyException» по причине: «Невозможно вызвать pushNavigationItem: анимированный : непосредственно на UINavigationBar, управляемом контроллером ».
- (void)applicationDidFinishLaunching:(UIApplication *)application {
rootHasNavBar = NO;
if (window && viewController)
{
// Tab Controller is root:
if (!rootHasNavBar)
{
window.rootViewController = viewController; // viewController:UITabBarController
[window makeKeyAndVisible];
}
else
{
// Navigation controller above UITabBarController
UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:viewController];
window.rootViewController = navigationController;
//Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Cannot call pushNavigationItem:animated: directly on a UINavigationBar managed by a controller.'
UINavigationItem* item = [[UINavigationItem alloc] initWithTitle:NSLocalizedString(@"RentalPoint",nil)];
[ navigationController.navigationBar pushNavigationItem:item animated:YES];
navigationController.toolbarHidden = YES;
[window makeKeyAndVisible];
};
}
Как это сделать? Или есть какая-то техническая причина, почему я не могу этого сделать?
Обновление: люди, которые предложили просто переместить назначение заголовка контроллера и заголовка элемента навигации в представлении контроллераDidLoad, были включены в некоторые внутренние (и крайне неинтуитивные для нового человека) аспекты архитектуры Cocoa, которые все еще были мне незнакомы , С внешней стороны, глядя на структуру, такую как Cocoa, которая огромна и сложна, и которая не позволяет вам просматривать исходный код, это та тайна, которую я считаю наиболее сложной. На других языках и инструментах я всегда могу читать и входить в код, включая мои фреймворки. здесь вы не можете, и поэтому вы должны читать, читать, читать и, к счастью, есть много отличных источников документации.
Не могли бы вы объяснить, как вы заявляете и инициализации rootHasNavBar? Как насчет viewController, это в nib/раскадровке? Странно, что viewController может быть корневым vc окна, тогда он также может быть назначен в качестве корня vc нового контроллера навигации. – danh
ViewController - это созданный экземпляр UITabBarController, и является корневым контроллером, если мне не нужен над ним UINavigationController. BOOL считывается из prefs. –