2

我不知道我在这里失踪。我有一个自定义UINavigationController,我正在尝试添加一个持久UIBarButtonItem到酒吧。添加UIBarButtonItem到UINav..Controller

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UIBarButtonItem *bbi = [[UIBarButtonItem alloc] initWithTitle:@"Nope..." 
       style:UIBarButtonItemStyleBordered 
       target:self 
       action:@selector(goBack:)]; 
    self.navigationItem.leftBarButtonItem =bbi; 
    [bbi release]; 
} 
-(void)goBack:(id)sender 
{ 
    NSLog(@"go back now"); 
} 

我在这里错过了什么? - 顺便说一句,我不想​​/不会使用IB。

UPDATE: 目前,这是最接近我能得到:

 
-(void)viewDidLoad 
{ 
    self.navigationBar.barStyle = UIBarStyleBlack; 
    UINavigationBar *navBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0, 20, 320, 44)]; 
    navBar.barStyle = UIBarStyleBlack; 
    UINavigationItem *navItem = [[UINavigationItem alloc] initWithTitle:@"Currently Playing..."]; 
    [navBar pushNavigationItem:navItem animated:NO]; 
    UIBarButtonItem *editButton = [[UIBarButtonItem alloc] initWithTitle:@"Close" style:UIBarButtonItemStyleBordered target:self action:@selector(goBack:)]; 
    navItem.rightBarButtonItem = editButton; 

    [self.view addSubview:navBar]; 

    [editButton release]; 
    [navItem release]; 
    [navBar release]; 
    [super viewDidLoad]; 
} 

这太可怕了,我有一个导航栏全部添加到已经有一个导航栏一UINavigationController ....如果我尝试使用现有,我得到这个错误:

 
'NSInternalInconsistencyException', reason: 'Cannot call pushNavigationItem:animated: directly on a UINavigationBar managed by a controller.' 

....真的吗?

+0

那么会发生什么?你看到你的UINavigationController,但它没有自定义栏按钮?你有没有在上述方法中打破,它确实被调用?你跨过了它,非对象引用是否为零?您逐步调用了调用此方法的方法,并且您可以看到导航栏已正确安装? – stefanB 2010-03-26 03:11:11

+0

调试器显示确实存在,但实际的显示没有任何内容。正如所宣称的那样,酒吧是黑色的。 – mlecho 2010-03-26 03:29:59

+0

将您的顶级代码放入您的根视图控制器中,而不是放在您的UINavigationController中。另外,在第二种情况下出现错误的原因是您不会像这样推导向栏。当您使用导航控制器时,您将新的视图控制器推到导航控制器堆栈上。这些新的视图控制器随后根据需要自定义其导航项目。 – 2010-03-26 04:25:34

回答

21

navigationItem不能在UINavigationController实例上设置,而是在导航控制器内部显示的视图的视图控制器上设置。

如果您的控制器本身被推入另一个导航控制器,那么在您的导航控制器上设置self.navigationItem会起作用。

相关问题