【问题标题】:Back button not appearing on pushed UIViewController后退按钮未出现在推送的 UIViewController 上
【发布时间】:2011-11-07 01:36:29
【问题描述】:

我有一个 UITableViewController。当我单击一个单元格时,我想推送一个新视图。这工作正常,但新视图没有后退按钮。这是为什么呢?

表格视图代码:

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;
    }
}

【问题讨论】:

  • 您是否在父视图中设置了self.navigationItem.backBarButtonItem;
  • ProfileViewController 只有self.navigationItem.rightBarButtonItem = replyButton;
  • 不是个人资料,ProfileViewController父母
  • ProfileViewController 的父级是我的 UITableViewController。我没有定义任何左右栏按钮项目。
  • 尝试在你的 UITableViewController 中设置:self.navigationItem.backBarButtonItem.title = @"Back";

标签: objective-c ios cocoa-touch uitableview uiviewcontroller


【解决方案1】:

如果你的表格视图控制器是从 nib 创建的,它的默认标题是@""(注意:不是nil,而是一个空字符串)。

后退按钮有一个错误,如果导航堆栈上的前一个控制器的标题为空字符串,则它不会显示,因此在您的表格视图控制器中,您需要将标题设置为 nil 或代码中的某个字符串,或 Interface Builder 中的一些字符串(不能将其设置为 nil 那里 afaik)。

【讨论】:

    【解决方案2】:

    来自 Apple 文档:

    导航栏左侧的栏按钮项允许导航回导航堆栈上的上一个视图控制器。导航控制器更新导航栏左侧如下:

    如果新的顶级视图控制器有一个自定义的左栏按钮项,则显示该项。要指定自定义左栏按钮项,请设置视图控制器导航项的 leftBarButtonItem 属性。

    如果顶级视图控制器没有自定义左栏按钮项,但前一个视图控制器的导航项在其 backBarButtonItem 属性中有有效项,则导航栏显示该项。

    如果任何一个视图控制器都没有指定自定义栏按钮项,则使用默认的后退按钮,并将其标题设置为前一个视图控制器的 title 属性的值——即视图控制器之一在堆栈上降级。 (如果导航堆栈上只有一个视图控制器,则不会显示返回按钮。)

    【讨论】:

    • 我不明白为什么没有显示默认的后退按钮。我只有 2 个 UITableViewController,都在 NavigationController 中。第一个 tableview 推动了第二个。
    • 检查self.navigationController是否不为零。
    • 它不能为空,因为[self.navigationController pushViewController:profileViewController animated:YES]; 有效
    • 尝试设置self.navigationItem.backBarButtonItem = @"Some title";
    【解决方案3】:

    检查您的导航控制器是否启用了导航栏。单击 IB 中导航控制器下的导航栏并检查“隐藏”是否未勾选。如果勾选,导航栏将不会显示,因此后退按钮也将不可见。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-06-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多