显示tabbarcontroller视图时,将RightButtonItem添加到导航栏

时间:2014-06-07 11:42:15

标签: ios navigationbar tabbarcontroller rightbarbuttonitem

在我的应用程序中,我tabbarcontroller不是第一个viewcontroller。它将从navigationcontroller打开(通过将其推送到其父级的堆栈)

现在我想在此视图的导航栏中添加rightbarbuttonitem。我正在使用此代码:

UIBarButtonItem *b= [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAction target:self action:@selector(actionBarButtonPressed)];
self.navigationController.navigationItem.rightBarButtonItem= b;

但它不起作用 - 任何按钮都不会出现在导航栏中。我搜索了这个,但在所有主题中,这些代码已被回答为工作解决方案。将tabbarnavigationbar结合使用时,可能会有所不同。有没有人知道任何其他有效的解决方案。

修改 我在最后一行添加了一个断点,并检查了一些变量。这是结果:

(lldb) po self.navigationController.navigationItem.rightBarButtonItem
error: property 'navigationItem' not found on object of type 'id'
error: 1 errors parsing expression
(lldb) po self.navigationController;
 nil
(lldb) po self.navigationItem;
<UINavigationItem: 0x8997070>
(lldb) 
(lldb) po self.navigationController.navigationItem.rightBarButtonItem
error: property 'navigationItem' not found on object of type 'id'
error: 1 errors parsing expression 

似乎navigationControllernil,我们直接应该致电navigationItem。所以我改变了代码但又没有工作。所以我检查了这些变量:

(lldb) po self.navigationItem
<UINavigationItem: 0x8d789c0>
(lldb) po self.navigationItem.rightBarButtonItem
error: property 'rightBarButtonItem' not found on object of type 'id'
error: 1 errors parsing expression
(lldb) 

似乎rightbarbuttonitem不存在。那么我们现在该怎么做呢?

2 个答案:

答案 0 :(得分:2)

您无法更改右侧栏按钮项的原因是因为只有标签栏控制器位于导航控制器堆栈中。视图控制器只能访问标签栏控制器。

因此,为了拥有自定义导航栏按钮,您必须在UITabBarController中添加/设置它。

如果您希望为每个视图控制器设置不同的UIBarButtons,请使用委托方法tabBarController:didSelectViewController:,您可以根据所选的视图控制器更改UIBarButtonItem。

答案 1 :(得分:1)

如果您的观点是:TabBarController ==&gt; NavigationController ==&gt; YourViewController

像这样设置UIBarButtonItem

self.tabBarController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(doSome)];