似乎无法让后退按钮出现在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
答案 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指南行,但没有看到它。