UINavigationBar右键没有显示出来

我通过通知使用以下function在我的UINavigationBar上加载一个右键,即使我可以找出按钮并validation它已分配,但它没有出现……任何想法?

编辑2011年4月6日,下午2:42

所以,有趣的东西……宽度总是报告为0.0 …

- (void)showRightBarButton:(id)sender { NSLog(@"Showing button"); UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPI:)]; [button setTitle:@"This Button"]; self.navigationItem.rightBarButtonItem = button; //[[self.navigationItem rightBarButtonItem] setWidth:50]; NSLog(@"Button width is %f.", self.navigationItem.rightBarButtonItem.width); [button release]; } 

 [self.view setNeedsDisplay]; 

你是对的。 那条线不是必需的。 至于代码的其余部分,我不知道它有什么问题。 到目前为止,我唯一想到的是self不是当前显示的视图控制器,或者你缺少导航控制器。 也许您自己创建了UINavigationBar而不是使用导航控制器?

无论如何,为了便于调试,我建议如下:

 - (void)showRightBarButton:(id)sender { NSLog(@"Showing button"); UIBarButtonItem *button = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemAdd target:self action:@selector(showPI:)]; self.navigationItem.rightBarButtonItem = button; [button release]; } 

编辑:宽度不是很有趣。 除非您自己指定,否则它始终为0.0。

问题是你在错误的地方添加按钮。 您不应该将按钮添加到导航控制器的导航项,而是添加到导航控制器当前显示的控制器的导航项。

您说您正在使用NSNotification来触发添加条形按钮项。 你在哪里注册通知? 是否可能在加载视图之前收到通知?

如果您在-init注册通知,则可能需要在视图控制器上设置一个标志,您应该显示条形按钮项,然后在-viewDidLoad引用该标记以选择性地显示它。

或者您可以在-viewDidLoad注册通知。