按下后退按钮时UINavigationController不弹出视图,但导航栏动画

Mic*_*nes 5 iphone uinavigationcontroller

我正在创建一个非常简单的示例应用程序,以显示首选项如何与我正在使用的新应用程序一起使用.这个过程非常简单:在IB中创建一个UINavigationController,为它分配视图控制器,它将成为根视图控制器,并在调用didSelectRowAtIndexPath时将新的视图控制器推送到导航控制器的堆栈上.

我已经阅读了尽可能多的相关主题,但我找不到满意的答案.

问题是,当按下后退按钮时,导航控制器会向后设置动画,但视图本身不会改回,这意味着它不会弹出.

这是我用来将新视图控制器推送到堆栈的代码.这是非常标准的.我添加了NSLog以确保它只被击中一次.

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath
{
if(indexPath.section != 0)
    return;

NSLog(@"didSelectRowAtIndexPath\n");

PrefsListTableViewController *prefsListTableViewController = [[PrefsListTableViewController alloc] initWithNibName:@"PrefsListTableViewController" bundle:nil];

[self.navigationController pushViewController:prefsListTableViewController animated:YES];
[prefsListTableViewController release];
}
Run Code Online (Sandbox Code Playgroud)

要检查是否在第二个视图上点击了viewWillDisappear调用,我将其添加到我的PrefsListTableViewController:

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"ptvc viewWillDisappear");
}
Run Code Online (Sandbox Code Playgroud)

这永远不会受到打击.

首先,我认为您不需要编写任何代码来处理后退按钮,因为当您按下后退按钮时,UINavigationController会自动弹出堆栈.我可以通过一个示例应用程序来展示我正在做的事情,但样本只是代码.代码来自Erica Sadun的iPhone Developer's Cookbook代码,食谱11-11.她的代码在这里:

https://github.com/erica/iphone-3.0-cookbook-/tree/master/C11-Tables/11-Disclosure%20Chevrons

如果你查看她的代码,就没有.xib文件,所有内容都是在不需要编写后退按钮的情况下处理的.视图控制器被推入代码中,并且看似没有代码而弹出.我更喜欢使用.xib文件,所有内容应该以相同的方式工作,但事实并非如此.

其次,我在NSLog语句中说明实际上,根导航控制器有两个视图控制器.

2011-11-18 11:14:36.355 TableViewTest[58011:207] didSelectRowAtIndexPath
2011-11-18 11:14:36.358 TableViewTest[58011:207] ptvc viewWillAppear (
"<TableViewController: 0x8923d40>",
"<PrefsListTableViewController: 0x8927a20>"
)
2011-11-18 11:14:36.717 TableViewTest[58011:207] ptvc viewDidAppear (
"<TableViewController: 0x8923d40>",
"<PrefsListTableViewController: 0x8927a20>"
)
Run Code Online (Sandbox Code Playgroud)

因此,您可以看到视图控制器按正确顺序推送.

这导致了一个问题:当按下后退按钮时,为什么不会弹出PrefsListTableViewController?如果有人需要更多信息,请告诉我.

Cyb*_*ass 0

您扩展了 UINavigationController 类吗?我做了并且遇到了同样的问题。显然,根据苹果文档,你不应该扩展该类......