UINavigationBar右键没有显示出来

时间:2011-04-06 16:43:23

标签: cocoa-touch ios uikit uinavigationcontroller uinavigationbar

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

EDIT 4/6/2011,下午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];
}

2 个答案:

答案 0 :(得分:4)

[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。

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

答案 1 :(得分:0)

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

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

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