(iOS7中的问题) 我知道将TabBarController放在NavigationController中是不好的。但是,如果它确实需要,有什么解决方案吗? stroyboard就像" This"。
问题在于:
在项目TVC'中,backBarItem不会弹出到其父级' SampleTVC',而是为了root' ProjTVC',为什么?
在' SampleTVC'中,如果被呼叫:
[self.navigationController setNavigationBarHidden:NO]
和[self.navigationController.navigationController setNavigationBarHidden:YES]
以隐藏根导航栏并显示最近的祖先导航栏,如何将最近的祖先导航栏的leftBarButtonItem设置为root的navigationItem的backBarButtonItem?
如果两个导航栏都没有隐藏,根导航栏将占主导地位(显示在最近的祖先导航栏顶部。但是,如何将rightBarButtonItem添加到根导航栏?我试过:
UIBarButtonItem *addButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(insertNewObject:)]
和self.navigationItem setRightBarButtonItem:addButton
,但未显示任何按钮。
设置self.navigationController.backBarButtionItem
从未对其后续导航视图产生任何影响。总是零。
在我看来,在此配置中混合使用TabBarController和NavigationController时,self.navigationItem
完成了混乱。
(我使用的一个丑陋的解决方案是:首先隐藏根导航栏,然后将UIBarButtonItem分配给最近的祖先导航栏&leftBarButtonItem,然后调用[self.navigationController.navigationController popViewControllerAnimated:YES]
,但是这个按钮将是一个不同的样式,因为backBarButtionItem应该是。如何在另一个导航栏的项目中获取当前显示的backBarButtionItem的副本?)
答案 0 :(得分:0)
从架构的角度和UX的角度来看,你真的不应该做这些事情。但是......你不需要第二套导航控制器。他们应该使用根导航控制器的推送和弹出就好了。导航控制器中的标签控制器很糟糕。但导航控制器内标签控制器内的导航控制器更糟糕。
编辑:
如果要修复导航项,则需要在选项卡控制器上进行设置。这是"当前"在导航控制器上查看控制器,因此它的导航项将显示在导航栏上。
答案 1 :(得分:0)
感谢您的提示。我已经删除了导航控制器。现在它可以正确地进行。 (问题1解决了)。
关于缺少RightBarButton,我实际上首先将self.navigationItem.rightBarButtonItem = addButton;
添加到自定义tabBarController的viewDidLoad中,然后在tabBarController的子控制器中添加
if (self.tabBarController) {
self.tabBarController.navigationItem.rightBarButtonItem = addButton;}
else{self.navigationItem.rightBarButtonItem = addButton;
}
发现self.navigationItem
实际上隐藏在标签控制器中时,这真的很棘手。实际显示的navigationBar实际上来自self.tabBarController.navigationItem