1

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

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

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

但它不起作用 - 导航栏中没有出现任何按钮。我对此进行了搜索,但在所有主题中,此代码已作为工作解决方案得到解答。tabbar也许它在使用和navigationbar在一起时应该有所不同。有谁知道任何其他可行的解决方案。

编辑 我在最后一行添加了一个断点广告并检查了一些变量。这是结果:

(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不存在。那么我们现在应该怎么做呢?

4

2 回答 2

2

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

因此,为了拥有自定义导航栏按钮,您必须在UITabBarController.

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

于 2014-06-07T12:42:58.997 回答
1

如果你的观点是:TabBarController==> NavigationController==>YourViewController

要这样设置UIBarButtonItem

self.tabBarController.navigationItem.rightBarButtonItem = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemEdit target:self action:@selector(doSome)];
于 2014-12-24T07:51:40.350 回答