推送一个新的 ViewController 并从 NavigationStack 中弹出最后一个

Posted

技术标签:

【中文标题】推送一个新的 ViewController 并从 NavigationStack 中弹出最后一个【英文标题】:Push a new ViewController and Pop the last one from NavigationStack 【发布时间】:2013-02-05 09:36:43 【问题描述】:

嘿伙计们,我想将一个新控制器推送到导航堆栈上,然后删除我从中推送的控制器。 这是我的代码:

WishDetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"WishDetailView"];
                                             detailView.transferWishID = [NSNumber numberWithFloat:[[response objectForKey:@"id"]floatValue]];
                                             [self.navigationController pushViewController:detailView animated:YES];
                                             [self.navigationController popViewControllerAnimated:NO];

一切正常,但我在控制台内收到此消息:

2013-02-05 10:32:42.029 BWMApp[1444:1a603] nested pop animation can result in corrupted navigation bar
2013-02-05 10:32:42.392 BWMApp[1444:1a603] Finishing up a navigation transition in an unexpected state. Navigation Bar subview tree might get corrupted.

那么我做错了什么以及如何防止我的应用抛出此错误消息?

【问题讨论】:

您是否尝试过先弹出当前最顶层的视图控制器,然后再推送新的?或者,您可以使用-setViewControllers:animated: 【参考方案1】:

您可以使用 setViewController。这个例子删除所有并插入其他,但给你基本的想法:)

NSMutableArray *viewCons = [[[self navigationController]viewControllers] mutableCopy];
[viewCons removeAllObjects];
[viewCons addObject:portraitTemp];
[viewCons addObject:self];

[[self navigationController] setViewControllers:viewCons];

【讨论】:

【参考方案2】:

无需弹出“旧”视图控制器。 navigationController 自动创建一个后退按钮。如果您从堆栈中弹出视图控制器,则没有视图控制器可以“跳”回来。这是控制台内出现消息的原因。导航控制器无法正常工作。

【讨论】:

【参考方案3】:
WishDetailViewController *detailView = [self.storyboard instantiateViewControllerWithIdentifier:@"WishDetailView"];
detailView.transferWishID = [NSNumber numberWithFloat:[[response objectForKey:@"id"]floatValue]];
[self.navigationController popViewControllerAnimated:NO];
[self.navigationController pushViewController:detailView animated:YES];

【讨论】:

以上是关于推送一个新的 ViewController 并从 NavigationStack 中弹出最后一个的主要内容,如果未能解决你的问题,请参考以下文章

如何关闭并推送新的 ViewController

单击tableview单元格行时如何推送新的viewcontroller?

UITableView 在推送新的 viewController 时重新加载数据

如何在作为导航控制器的插入视图的 tableview 中推送新的 viewController?

通过 UIScrollView 推送 ViewController

iOS点击推送通知打开具体的viewcontroller