2017-02-02 59 views
1

工作的要求是相当简单的,继承人一些代码:去除UINavigation特定视图控制器堆栈不在iOS的

- (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我想从viewController列表中删除它。然而,amendedViewControllerStack删除ChoosePathViewController,但[mainNavController setViewControllers:amendedViewControllerStack];永远不会实际更新navigationController viewControllers。

我检查过几个SO帖子,这段代码不应该给任何问题。任何想法为什么它不工作?

+0

总之是,堆栈通常看起来像这样:HomeController,DetailsViewController,ChoosePathViewController,VerificationController。我想弹出到DetailsViewController。但是,如果这样做,我会看到ChoosePathViewController几秒钟,我不想要这个。因此,为什么我试图从列表中删除它 – user481610

+0

对不起,我在您写下之前删除了我的评论,我以为我误解了你,但似乎我理解了你。但是,我还没有尝试过这一行代码,但是如果你有这个代码,你是否阅读过有关这方面的文档? https://developer.apple.com/reference/uikit/uinavigationcontroller/1621861-setviewcontrollers?language=objc,我不确定“setViewControllers”是否与“setViewControllers:animated”一样工作,你试过了吗?如果它解决了你的问题,让我知道我会更新答案。 –

+1

@Sneak该文档解释说,setViewControllers等同于调用setViewControllers:animated:将动画参数设置为NO。记住用objc foo.viewControllers = bar;可以写成[foo setViewControllers:bar]; – Bamsworld

回答

0

我注意到你没有中断:if ([viewController isKindOfClass:[ChoosePathViewController class]]) {跳出循环。

难道是你将数组设置为导航控制器,并在同一时间你弹出到DetailsViewController,这将使动画奇怪?

编辑: 一个建议,为什么不创建一个NSMutableArray,并在树中按照需要的顺序添加viewController,在迭代过程中,并且在完成之后,只需运行“setViewControllers”方法用你的新的VC更新阵列?

相关问题