iOS - 弹出两个或更多控制器,但不是顶部

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS - 弹出两个或更多控制器,但不是顶部相关的知识,希望对你有一定的参考价值。

我有以下场景:

A(Bottom) -> B -> C -> D(Top)

一旦我在顶部(D控制器)我想弹出B和C控制器。这样当我从D向后按时我可以到A.

甚至可能吗?

答案

是的,你可以,在推送到D viewController之后需要更改导航堆栈

NSMutableArray *navigationStack = [D.navigationController.viewControllers mutableCopy];
[navigationStack removeObject:B];
[navigationStack removeObject:C];
[D.navigationController setViewControllers:navigationStack animated:NO];

弹回后你会回到A

另一答案

你也可以这样做从D到A弹出。

navCon.popToViewController(navCon.viewControllers[navCon.viewControllers.count - 4], animated: true)

或者,如果您有A的参考

navCon.popToViewController(aViewController, animated: true)
另一答案

uinavigationcontroller中有一个清理导航堆栈的方法:“ - popToRootViewControllerAnimated:”使用此方法,如果从D调用它,则直接弹出到A.如果你想要一个更加个性化的导航,比如“我只想弹出2个以前的控制器”或类似的东西,你必须建立像@iSashok那样的堆栈。

另一答案
for item in self.navigationController!.viewControllers {
    // Filter for your desired view controller:
    if item.isKind(of: SchedulesViewController.self) { 
        self.navigationController?.popToViewController(item, animated: true)
    }
}

以上是关于iOS - 弹出两个或更多控制器,但不是顶部的主要内容,如果未能解决你的问题,请参考以下文章

iOS:如何检测视图控制器是不是在弹出或关闭后出现

在 iOS 5 上使用 Segues/Storyboard 弹出当前视图

在 iOS 中单击按钮时,如何在视图控制器顶部显示视图?

iOS如何在弹出顶视图控制器时以编程方式检测?

iOS ChildViewController 有不同的视图

视图层次结构未准备好