2012-06-27 52 views
0

我正在使用下面的代碼來嘗試爲我的應用程序製作一個「後退」按鈕,該代碼所在的視圖位於模式視圖中任何軸承?):「返回」按鈕不顯示在UINavigationController中

navBar = [[UINavigationController alloc] initWithRootViewController:tvController]; 

[navBar.view setFrame:CGRectMake(0, 0, 320, 460)]; 
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle: @"Back" 
                      style: self.navigationController.navigationItem.leftBarButtonItem.style 
                      target: self 
                      action: @selector(backAction)]; 
navBar.navigationItem.backBarButtonItem.enabled = YES; 

[self.view addSubview:navBar.view]; 

該視圖根本不顯示,謝謝任何提示!

編輯:即使我使用leftBarButtonItem,它仍然不出現,我認爲有一些問題與我的代碼self.navigationItem位?

+0

http://stackoverflow.com/a/11160287/169277 – ant

+0

即使我使用leftBarButtonItem,它仍然不顯示,我認爲有我的代碼self.navigationItem位有一些問題? – prince

+0

可能重複的[UIBarButton不會顯示在我的UINavigationController](http://stackoverflow.com/questions/11159707/uibarbutton-wont-show-in-my-uinavigationcontroller) – FoamyGuy

回答

3

你需要確保當你提出你把它包裝在一個UINavigationController的模式的看法,那麼你就會有一個有效的導航欄來操作。否則,您將更改導航項目,但它不會顯示,因爲您不在導航控制器中。

所以,當你去呈現視圖控制器時,你可能正在做這樣的事情。

SomeViewController *someViewController = [[[SomeViewController alloc] init] autorelease]; 
[self presentModalViewController:someViewController animated:YES]; 

你想要做的是目前它這樣

SomeViewController *someViewController = [[[SomeViewController alloc] init] autorelease]; 
UINavigationController *navigationController = [[[UINavigationController alloc] initWithRootViewController:someViewController] autorelease] 
[self presentModalViewController:navigationController animated:YES]; 

然後,當你在模式的看法是你有一個有效的導航欄,你可以操縱。在那個點上改變leftBarButtonItem實際上會做些事情並且可見。

如果你試圖讓這個顯示一個後退按鈕,儘管你可能會「做錯了」,通常如果你正在呈現一些模式這樣的東西,你會顯示一個「完成」按鈕。然而,通過像這樣的導航控制器包裝它,它確實允許模態視圖然後推送和彈出視圖控制器並作爲正常的導航堆棧來操作。但它的根本可能應該有一個「完成」按鈕而不是返回到其以前的狀態。

+0

好的,這很好。不過,我有這樣的代碼行:navBar = [[UINavigationController alloc] initWithRootViewController:tvController];在模式視圖中,因爲navBar不再被使用,我試圖做到這一點:self.navigationController = [[UINavigationController alloc] initWithRootViewController:tvController];但self.navigationController是一個只讀屬性,任何方式圍繞? – prince

+0

有什麼想法?完全丟失在此刻 – prince

+1

你能告訴我更多關於tvController是什麼嗎?這是你試圖使用的某種自定義導航欄嗎? –

1

backBarButtonItem屬性需要在堆棧中的前一個項目上定義,即在您要返回的視圖控制器上,而不是當前的項目上。

編輯:

OK,我現在看到您要添加自己的自定義導航欄。在這種情況下,您無法使用視圖控制器的導航項目。您必須將自己的導航項目推到導航欄上,然後訪問它們。例如:

UINavigationItem *item = [[UINavigationItem alloc] initWithTitle:@"Back"]; 
item.leftBarButtonItem = ...; 
[navBar pushNavigationItem:item animated:NO]; 
+0

好吧,我不能夠使用leftBarButtonItem來代替? – prince

+0

您可以在當前可見的視圖控制器上使用leftBarButtonItem,但不會獲得標準的後退按鈕形狀。 –

+0

看到我在原始問題編輯 – prince

相關問題