我有以下场景:
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)
}
}