要求相当简单,下面是一些代码:
- (void)returnToDetailsScreen {
UINavigationController *mainNavController = self.navigationController;
NSArray *reversedViewControllers = [[mainNavController.viewControllers reverseObjectEnumerator] allObjects];
for (UIViewController *viewController in reversedViewControllers) {
if ([viewController isKindOfClass:[DetailsViewController class]]) {
[mainNavController popToViewController:viewController animated:YES];
return;
}
if ([viewController isKindOfClass:[ChoosePathViewController class]]) {
NSMutableArray *amendedViewControllerStack = [NSMutableArray arrayWithArray:[mainNavController viewControllers]];
[amendedViewControllerStack removeObject:viewController];
[mainNavController setViewControllers:amendedViewControllerStack];
}
}
}
总之,我想做的就是两件事,当迭代浏览我想要的viewControllers时,当我发现DetailsViewController
弹出到屏幕,如果我找到ChoosePathViewController
我想要从viewControllers列表中删除它。但是,amendedViewControllerStack
删除ChoosePathViewController
,但[mainNavController setViewControllers:amendedViewControllerStack];
实际上从未更新navigationController
viewControllers。
我已经检查了几个SO帖子,这段代码不应该给出任何问题。关于它为什么不起作用的任何想法?
答案 0 :(得分:0)
我注意到你没有中断:{{1}}以摆脱循环。
是不是你要将数组设置为navigationController,同时你弹出 DetailsViewController ,这会让动画以某种方式变得奇怪?
编辑: 一个建议,为什么不创建一个NSMutableArray并按照你想要的顺序在树中添加你想要的viewControllers,迭代时,在你完成后,你只需要运行" setViewControllers"使用新更新的VC数组的方法?