iOS右侧导航按钮不显示在UINavigationBar中

时间:2012-10-31 19:12:40

标签: ios uinavigationcontroller uinavigationbar uinavigationitem

我有以下视图控制器层次结构:

  • 查看控制器VC1
  • 标签栏控制器TBC1 - 在故事板中配置以通向表视图控制器TVC1和地图视图控制器MVC1
  • 表视图控制器TVC1
  • 表视图控制器TVC2

在VC1中,我这样做:

[self.navigationController pushViewController:TBC1 animated:YES];

这正确地调出了标签栏控制器,TVC1成为焦点。

TVC1在其导航栏中显示后退按钮(以编程方式从VC1代码创建),这将使我进入预期的VC1。

但是,从TVC1开始,我需要再向TVC2导航一次。我正在尝试向TVC1导航栏添加右键,但它没有显示出来。

这是我在TVC1中使用的代码(rightButton是TVC1的UIButton类型属性):

   self.rightButton = [[UIBarButtonItem alloc]
                            initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
                            target: self
                            action: @selector(MySelector:)];
   self.rightButton.style = UIBarButtonItemStyleBordered;
   self.rightButton.title = @"";
   self.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects:   self.rightButton, nil];

(指定空白标题和样式只是为了确保是否是导致此问题的问题,我实际上并不需要这些值)

MySelector在TVC1.h中声明为:

- (void) MySelector:(id)sender;

它也得到了适当的实施。

但上面的rightButton不会显示在TVC1导航栏中。

我错过了什么? 我怀疑它与VC1和TVC1之间的TBC1(标签栏),并以某种方式重置导航属性。

但后来我争辩说我在TVC1上看到了导航栏,并且有一个左键通向VC1。 我在TBC1中检查过,self.navigationItem.rightBarButtonItems里面有一个对象,里面肯定是我要添加的rightButton。

我哪里错了?

注意:以上内容适用于所有iOS 5.0,5.1和6.0模拟器。

2 个答案:

答案 0 :(得分:6)

在我看来,你的故事板中缺少TVC1和TVC2之间的UINavigationController。如果您正在使用故事板,那么您可以在导航控制器本身上创建导航项目添加按钮类型,并向TVC2推送PUSH segue。如果有意义,请参见this图表。如果这不能解决您的问题,那么请上传示例代码,我将会看一下。

[编辑]

我通过在故事板中创建视图控制器结构来重现您的问题。

storyboard

如果你注意到这里TVC1没有它的UINavigationController,但它是从VC1继承的。你的问题的解决方案不是将rightButton添加到self上,而是将它添加到self.parentViewController,你将在TVC1中看到rightButton。但请注意,它也会出现在MVC1中,因为它属于TBC1的父级。你可以在MVC1的viewWillAppear中隐藏右键按钮,如果你不想在那里。以下是代码。

self.rightButton = [[UIBarButtonItem alloc]
                    initWithBarButtonSystemItem: UIBarButtonSystemItemAdd
                    target: self
                    action: @selector(MySelector:)];
self.rightButton.style = UIBarButtonItemStyleBordered;
self.parentViewController.navigationItem.rightBarButtonItems = [NSArray arrayWithObjects: self.rightButton,nil];

如果要在TVC1的导航控制器中添加右键,则需要将TVC1嵌入到UINavigationController中。为此,请在故事板中选择TVC1屏幕 - >编辑 - >嵌入 - >导航控制器。当你这样做时,你的代码也会工作,并会显示你的右键,但由于你的故事板结构,你将有两个导航控制器(见下图)。您将需要隐藏Parent的导航控制器进入TVC1的视图加载并留下按钮弹出到Parentview Controller。你在MVC1中做同样的事。

希望这有帮助!快乐的编码:)

output

答案 1 :(得分:0)

最近在Swift中遇到了同样的问题,发现在navigationController中嵌入子视图仍然是能够访问rightBarButtonItems的正确方法。