给出此代码后,为什么不出现后退按钮(UINavigationController问题)

时间:2011-02-27 02:12:49

标签: iphone ios uinavigationcontroller uitableview uibarbuttonitem

似乎无法让后退按钮出现在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:大卫 - 确实使用下面的代码工作,除了文本是“后退”而不是我之后的父控制器的标题 - 尝试删除.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“ ;”到父控制器固定的东西(并删除我手动设置后退按钮tittle的行)

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

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

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

要获得所需的行为,请使用leftBarButtonItem

self.navigationItem.leftBarButtonItem = backButton;

答案 2 :(得分:0)

当时视图确实调用了lOad,相应的导航栏不在堆栈上,你应该在UIViewController的viewdidappear方法中编写代码

答案 3 :(得分:0)

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

然后,如果从具有标题“第一视图”的视图控制器中推出视图控制器,则按下的视图控制器将具有带有“第一视图”标签的后退按钮。

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

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

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