iphone - 按下后退按钮时 UINavigationController 不会弹出 View ,但导航栏会动画

标签 iphone uinavigationcontroller

我正在创建一个非常简单的示例应用程序,以展示首选项如何与我正在开发的新应用程序配合使用。过程非常简单:在IB中创建一个UINavigationController,为其分配将成为 Root View Controller 的 View Controller ,并在调用didSelectRowAtIndexPath时将新的 View Controller 推送到导航 Controller 的堆栈中。

我已经阅读了尽可能多的相关主题,但从未找到令人满意的答案。

问题是,当按下后退按钮时,导航 Controller 会动画返回,但 View 本身不会变回原样,这意味着它不会弹出。

这是我用来将新 View Controller 插入堆栈的代码。这是相当标准的。我添加了 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];
}

为了检查是否在第二个 View 上调用了 viewWillDisappear,我将其添加到了我的 PrefsListTableViewController 中:

- (void)viewWillDisappear:(BOOL)animated
{
[super viewWillDisappear:animated];
NSLog(@"ptvc viewWillDisappear");
}

这永远不会受到打击。

首先,我的印象是您不需要编写任何代码来处理后退按钮,因为当您按下后退按钮时 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 文件,并且一切都可以处理,根本不需要编写后退按钮的代码。 View Controller 是用代码推送的,并且弹出的,看起来似乎没有代码。我更喜欢使用 .xib 文件,一切都应该以相同的方式工作,但事实并非如此。

其次,我放入 NSLog 语句来表明实际上根导航 Controller 有两个 View Controller 。

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>"
)

因此您可以看到 View Controller 已按正确的顺序推送。

这就引出了一个问题:为什么按下后退按钮时 PrefsListTableViewController 没有弹出?如果有人需要更多信息,请告诉我。

最佳答案

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

关于iphone - 按下后退按钮时 UINavigationController 不会弹出 View ,但导航栏会动画,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185841/

相关文章:

ios - 在 navigationController 中呈现 viewController

iOS 10 应用程序未在设置中显示

iphone - 什么会导致 iphone 应用程序未报告的崩溃?

iphone - 构建时的InfoPlist.strings问题

objective-c - 如何返回到 Objective-C 中的上一个 View ?

iphone - 如果没有 View 更新,动画不会开始

iphone - 如何以编程方式在 iPhone 中查找可用内存?

javascript - Google Map V3 未居中,仅显示 map 的一部分

ios - 导航 Controller 栏被切断

ios - 在标签栏 Controller 中查看 Controller