2011-08-30 36 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导航控制器下的导航栏,检查是否隐藏'隐藏'。如果打勾,导航栏将不会显示,所以后退按钮也将不可见。

相关问题