2

似乎无法让后退按钮出现在UINavigationController流。我只是想让它自动触发当前控制器的弹出窗口,以回到父窗口。为什么不会出现后退按钮出现此代码(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上面我居然看不到任何按钮都出现在左边。编辑2:大卫,我试图按下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 = @ “视图”;”给父母控制器修理东西(并删除我手动设置后退按钮的行)

EDIT5 - 对于像我这样感到困惑的人 - 所以最后你不需要任何backBarButtonItem设置代码在家长控制器中 - 只是要确保父控制器有一个“标题”设置,然后事情似乎自动工作 - doh

回答

2

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

+0

大卫,我试图在RootViewController按钮以下的后台代码(并将其从AppointmentListController中拉出),但它仍然不显示任何形式的返回键?把代码放在我试过的EDIT2区域 – Greg 2011-02-27 03:32:20

+0

David - 再试一次,这个工作一定是第一次犯了一个错误 - 把我用在主帖中的代码作为参考 – Greg 2011-02-27 04:20:17

+0

哦..我唯一注意到的是文本是“回”,而不是父控制器的标题 - 我试图删除temporaryBarButtoItem.title =行但是这仍然没有工作,没有按钮,当我这样做 – Greg 2011-02-27 04:23:32

0

backBarButtonItem是当视图控制器后面显示的是另一个视图控制器导航堆栈。换句话说,如果您要将视图控制器放在它的顶部,而不是在后退按钮中看到“详细视图”,那将是一个取消按钮。

为了得到你想要的行为,使用leftBarButtonItem

self.navigationItem.leftBarButtonItem = backButton; 
+0

我提供了这个西蒙,我确实得到了一个按钮,但它是一个正常的取消按钮。它不是一个带有父控制器标题的后退按钮,还有一个左手柄箭头作为按钮的一部分指向左侧? – Greg 2011-02-27 03:34:04

+0

我很困惑你想要的应用程序看起来像那么,你设置的按钮是一个取消按钮,但你不希望它是一个取消按钮? – 2011-02-27 03:54:13

+0

对不起,如果我还没有清楚 - 我只是想获得左侧的标准按钮(用于UINavigationController)类型的流程,将您带回(或上一级控制器) - 我在iPhone应用程序中看到它们为作为按钮设计的一部分,一个按钮但带有一个指针箭头 - 我真的只是想让其中的一个出现并得到一点困惑,在您拥有的场景中必须做的最低要求是什么在UINavigationController设置中的父控制器,然后你弹出下一个子控制器上它 – Greg 2011-02-27 03:59:09

0

当时视图没有负载被称为合适的导航栏是不是在栈中,你应该把代码写在UIViewController中

的viewdidappear方法
0

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

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

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

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

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