从UINavigation堆栈中删除特定视图控制器无法在iOS中运行

时间:2017-02-02 16:44:04

标签: ios objective-c

要求相当简单,下面是一些代码:

- (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帖子,这段代码不应该给出任何问题。关于它为什么不起作用的任何想法?

1 个答案:

答案 0 :(得分:0)

我注意到你没有中断:{{1}}以摆脱循环。

是不是你要将数组设置为navigationController,同时你弹出 DetailsViewController ,这会让动画以某种方式变得奇怪?

编辑: 一个建议,为什么不创建一个NSMutableArray并按照你想要的顺序在树中添加你想要的viewControllers,迭代时,在你完成后,你只需要运行" setViewControllers"使用新更新的VC数组的方法?