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會起作用。

相關問題