2

似乎無法讓後退按鈕出現在UINavigationController流。我只是想讓它自動觸發當前控制器的彈出窗口,以回到父窗口。爲什麼不會出現後退按鈕出現此代碼(UINavigationController問題)

我對於獲得一個自動返回按鈕(我的意思是一個帶有父控制器的標題和一個箭頭指向左側的按鈕)所需的最低限額有點困惑, ,然後你需要做些什麼來定製除此之外的東西。我只是在這個階段尋找前者。

@implementation AppointmentListController 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    self.title = @"Detailed View"; 
    UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:nil]; 
    self.navigationItem.backBarButtonItem = backButton; 
    [backButton release]; 
} 

的代碼來獲得這個觀點(即父控制器代碼):

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { 
    AppointmentListController *appointmentListController = [[AppointmentListController alloc] initWithNibName:@"AppointmentListController" bundle:nil]; 
    [ [self navigationController] pushViewController:appointmentListController animated:YES]; 
    [appointmentListController release]; 
} 

編輯:用代碼PS上面我居然看不到任何按鈕都出現在左邊。編輯2:大衛,我試圖按下RootViewController中的後臺代碼(並將其從AppointmentListController中拉出),但它仍然不顯示任何種類的後退按鈕?

UIBarButtonItem *backButton = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemCancel target:nil action:nil]; 
self.navigationItem.backBarButtonItem = backButton; 
[backButton release]; 

EDIT3:大衛 - 沒有工作實際上用下面的代碼,除了文本呈「回」,而不是父控制器的標題像我之後 - 試圖刪除.title僞=線,但隨後沒有按鈕出現。

// create a custom navigation bar button and set it to always say "Back" 
UIBarButtonItem *temporaryBarButtonItem = [[UIBarButtonItem alloc] init]; 
temporaryBarButtonItem.title = @"Back"; 
self.navigationItem.backBarButtonItem = temporaryBarButtonItem; 
[temporaryBarButtonItem release]; 

EDIT4 - 壞 - 我沒有設置父控制器的稱號,所以我想在這種情況下,它不會嘗試,但後退按鈕根本上 - 因此增加「self.title = @ 「視圖」;」給父母控制器修理東西(並刪除我手動設置後退按鈕的行)

EDIT5 - 對於像我這樣感到困惑的人 - 所以最後你不需要任何backBarButtonItem設置代碼在家長控制器中 - 只是要確保父控制器有一個「標題」設置,然後事情似乎自動工作 - doh

回答

2

後退按鈕不是指頂部控制器,而是第二個控制器堆棧控制器。你把後退按鈕放在你的detailViewController上。你應該把它放在你的UITableViewController上。

+0

大衛,我試圖在RootViewController按鈕以下的後臺代碼(並將其從AppointmentListController中拉出),但它仍然不顯示任何形式的返回鍵?把代碼放在我試過的EDIT2區域 – Greg 2011-02-27 03:32:20

+0

David - 再試一次,這個工作一定是第一次犯了一個錯誤 - 把我用在主帖中的代碼作爲參考 – Greg 2011-02-27 04:20:17

+0

哦..我唯一注意到的是文本是「回」,而不是父控制器的標題 - 我試圖刪除temporaryBarButtoItem.title =行但是這仍然沒有工作,沒有按鈕,當我這樣做 – Greg 2011-02-27 04:23:32

0

backBarButtonItem是當視圖控制器後面顯示的是另一個視圖控制器導航堆棧。換句話說,如果您要將視圖控制器放在它的頂部,而不是在後退按鈕中看到「詳細視圖」,那將是一個取消按鈕。

爲了得到你想要的行爲,使用leftBarButtonItem

self.navigationItem.leftBarButtonItem = backButton; 
+0

我提供了這個西蒙,我確實得到了一個按鈕,但它是一個正常的取消按鈕。它不是一個帶有父控制器標題的後退按鈕,還有一個左手柄箭頭作爲按鈕的一部分指向左側? – Greg 2011-02-27 03:34:04

+0

我很困惑你想要的應用程序看起來像那麼,你設置的按鈕是一個取消按鈕,但你不希望它是一個取消按鈕? – 2011-02-27 03:54:13

+0

對不起,如果我還沒有清楚 - 我只是想獲得左側的標準按鈕(用於UINavigationController)類型的流程,將您帶回(或上一級控制器) - 我在iPhone應用程序中看到它們爲作爲按鈕設計的一部分,一個按鈕但帶有一個指針箭頭 - 我真的只是想讓其中的一個出現並得到一點困惑,在您擁有的場景中必須做的最低要求是什麼在UINavigationController設置中的父控制器,然後你彈出下一個子控制器上它 – Greg 2011-02-27 03:59:09

0

當時視圖沒有負載被稱爲合適的導航欄是不是在棧中,你應該把代碼寫在UIViewController中

的viewdidappear方法
0

如果您先設置viewController標題(self.title),後退按鈕會自動顯示。

然後,如果您從標題爲「第一視圖」的視圖控制器中推視圖控制器,按下的按鈕將帶有一個帶有「第一視圖」標籤的後退按鈕。

如果您沒有設置標題,則自動返回按鈕僅出現在第三個推送視圖上,而不是之前。

firstController (title: "", back: NO) -> secondController (title: "", back: NO) -> thirdController (title: "", back: YES) 

我不知道這是一個錯誤還是他們想要它。我閱讀了UINavigationController指南,但沒有看到任何內容。