我通过通知使用以下功能在我的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];
}
答案 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
注册通知。