2011-08-30 51 views
9

我有一個UITableViewController。當我點擊一個單元格時,我想推新視圖。這工作正常,但新視圖沒有後退按鈕。爲什麼是這樣?後退按鈕不會出現在推送UIViewController

TableViewCode:

if([[NSUserDefaults standardUserDefaults] boolForKey:@"isLoggedIn"]) 
{ 
    UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; 
    ProfileViewController* profileViewController = [[ProfileViewController alloc] initWithNibName:@"ProfileViewController" bundle:nil]; 
    profileViewController.message = [NSDictionary dictionaryWithObjectsAndKeys:cell.textLabel.text, @"user_login", @"default", @"message_source", nil]; 
    switch(indexPath.row) { 
     case kUsernameRow:     
      [self.navigationController pushViewController:profileViewController animated:YES]; 
      [profileViewController release]; 
      break; 
     case kAboutRow:     
      break; 
     case kTOSRow:     
      break; 
    } 
} 
+1

您是否在您的父視圖中設置了'self.navigationItem.backBarButtonItem;'? – Nekto

+1

ProfileViewController只有'self.navigationItem.rightBarButtonItem = replyButton;' –

+1

不是ProfileView ** ProfileViewController的父**。 – Nekto

回答

14

如果您的表視圖控制器從筆尖創建的,它的默認標題爲@""(注意:不是nil,但空串)。

如果導航堆棧上的前一個控制器的標題是空字符串,返回按鈕就不會顯示,因此在您的表視圖控制器中,您需要將標題設置爲nil或代碼中的某個字符串,或者Interface Builder中的一些字符串(無法將其設置爲nil afaik)。

4

從蘋果文檔:

導航欄的左側的欄按鈕項允許導航回到導航堆棧上的前視圖控制器。導航控制器按如下方式更新導航欄的左側:

如果新的頂層視圖控制器具有自定義左欄按鈕項目,則會顯示該項目。要指定自定義左欄按鈕項目,請設置視圖控制器導航項目的leftBarButtonItem屬性。

如果頂級視圖控制器沒有自定義左欄按鈕項目,但前一個視圖控制器的導航項目在其backBarButtonItem屬性中具有有效項目,則導航欄會顯示該項目。

如果任一視圖控制器未指定自定義欄按鈕項目,則會使用默認後退按鈕並將其標題設置爲前一視圖控制器的title屬性的值 - 即視圖控制器一個級別在堆棧上。 (如果有導航堆棧上只有一個視圖控制器,顯示沒有後退鍵)

+0

我不明白爲什麼沒有顯示默認的後退按鈕。我只有2個UITableViewControllers,都在NavigationController內部。第一個tableview推動第二個。 –

+0

檢查'self.navigationController'是否不爲零。 – Nekto

+1

它不能爲空,因爲'[self。navigationController pushViewController:profileViewController animated:YES];' –

2

檢查您的導航控制器是否已啓用導航欄。點擊IB導航控制器下的導航欄,檢查是否隱藏'隱藏'。如果打勾,導航欄將不會顯示,所以後退按鈕也將不可見。