工作的要求是相当简单的,继承人一些代码:去除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帖子,这段代码不应该给任何问题。任何想法为什么它不工作?
总之是,堆栈通常看起来像这样:HomeController,DetailsViewController,ChoosePathViewController,VerificationController。我想弹出到DetailsViewController。但是,如果这样做,我会看到ChoosePathViewController几秒钟,我不想要这个。因此,为什么我试图从列表中删除它 – user481610
对不起,我在您写下之前删除了我的评论,我以为我误解了你,但似乎我理解了你。但是,我还没有尝试过这一行代码,但是如果你有这个代码,你是否阅读过有关这方面的文档? https://developer.apple.com/reference/uikit/uinavigationcontroller/1621861-setviewcontrollers?language=objc,我不确定“setViewControllers”是否与“setViewControllers:animated”一样工作,你试过了吗?如果它解决了你的问题,让我知道我会更新答案。 –
@Sneak该文档解释说,setViewControllers等同于调用setViewControllers:animated:将动画参数设置为NO。记住用objc foo.viewControllers = bar;可以写成[foo setViewControllers:bar]; – Bamsworld