【问题标题】:why won't the back button appear given this code (UINavigationController question)鉴于此代码,为什么后退按钮不会出现(UINavigationController 问题)
【发布时间】:2011-07-05 02:20:21
【问题描述】:

似乎无法让后退按钮出现在 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 上面的代码我实际上没有看到任何按钮出现在左侧。

EDIT2:David,我尝试在 RootViewController 中按以下后退按钮代码(并将其从 AppointmentListController 中拉出),但它仍然没有显示任何后退按钮?

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

EDIT3:David - 确实使用以下代码工作,除了文本是“返回”而不是像我之后的父控制器的标题 - 尝试删除 .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 = @”Views“ ;"到父控制器固定的东西(并删除我手动设置后退按钮标题的行)

EDIT5 - 对于任何像我一样困惑的人 - 所以最后你根本不需要父控制器中的任何 backBarButtonItem 设置代码 - 只需要确保父控制器设置了“标题”并且然后事情似乎会自动运行-doh

【问题讨论】:

    标签: iphone ios uinavigationcontroller uitableview uibarbuttonitem


    【解决方案1】:

    后退按钮不是指顶部控制器,而是第二控制器堆栈控制器。您将后退按钮放在您的 detailViewController 上。你应该把它放在你的 UITableViewController 上。

    【讨论】:

    • David,我尝试在 RootViewController 中按下以下后退按钮代码(并将其从 AppointmentListController 中拉出),但是它仍然没有显示任何后退按钮?把代码放到我试过的EDIT2区
    • 大卫 - 再试一次,这肯定是第一次犯了错误 - 将我使用的代码放在主帖中以供参考
    • 哦..我注意到的唯一一件事是文本是“返回”而不是父控制器的标题 - 我尝试删除临时BarButtoItem.title= 行但是这仍然不起作用,那里当我这样做时根本没有按钮
    • 很糟糕 - 我没有设置父控制器的标题,所以我猜在这种情况下它根本不会尝试但一个后退按钮 - 所以添加“self.title = @ “意见”;“到父控制器固定的东西(并删除我手动设置后退按钮标题的行)
    • 很糟糕 - 我没有设置父控制器的标题,所以我猜在这种情况下它根本不会尝试但一个后退按钮 - 所以添加“self.title = @ “意见”;“到父控制器固定的东西(并删除我手动设置后退按钮标题的行)
    【解决方案2】:

    backBarButtonItem 是当视图控制器位于导航堆栈中另一个视图控制器之后时显示的内容。换句话说,如果您将视图控制器推到它上面,而不是在后退按钮中看到“详细视图”,它将是一个取消按钮。

    要获得您想要的行为,请使用 leftBarButtonItem

    self.navigationItem.leftBarButtonItem = backButton;
    

    【讨论】:

    • 我试了这个 Simon,然后我确实得到了一个按钮,但它是一个普通的 CANCEL 按钮。这不是一个带有父控制器标题的后退按钮和一个指向左侧的小手柄箭头作为按钮的一部分?
    • 我很困惑您希望应用程序是什么样子,您将按钮设置为取消按钮,但您不希望它成为取消按钮?跨度>
    • 对不起,如果我不清楚 - 我只是想获得左侧的标准按钮(对于 UINavigationController)类型流,它可以带你返回(或上一级控制器) -我在 iPhone 应用程序中将它们视为一个按钮,但作为按钮设计的一部分,左侧有一个指针箭头 - 我真的只是想让其中一个出现并且有点困惑你必须做到的最低限度在 UINavigationController 设置中有父控制器的场景中执行,然后将下一个子控制器弹出到它上面
    【解决方案3】:

    在view做lOad调用的时候相应的navigationbar不在栈上,应该在UIViewController的viewdidappear方法中写代码

    【讨论】:

      【解决方案4】:

      如果您先设置 viewController 标题 (self.title),后退按钮会自动显示。

      然后,如果您从标题为“第一个视图”的视图控制器推送视图控制器,被推送的视图控制器将有一个带有标签“第一个视图”的后退按钮。

      如果您不设置标题,则自动后退按钮仅出现在第三个推送视图上,而不是之前。

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

      我不知道这是一个错误还是他们想要的。我阅读了 UINavigationController 指南,但没有看到任何内容。

      【讨论】:

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