是否可以更改UINavigationController
的先前视图控制器?
假设我有三个嵌入UINavigationController
的视图控制器(A,B,C)。点击A中的按钮按下B并点击B中的按钮将推送到C.现在,如果用户点击C的后退按钮,我想将用户直接重定向到A而不是B.
答案 0 :(得分:2)
let arrViewControllers: [Any]? = self.navigationController?.viewControllers
for controller: Any in arrViewControllers! {
if (controller is cVC) {
self.navigationController!.popToViewController(controller as! UIViewController, animated: true)
}
}
答案 1 :(得分:1)
当然有 -
self.navigationController?.popToViewController(viewControllerA, animated: true)
有关详细信息,请阅读documentation。
查看this SO question以了解如何将其与后退按钮结合使用。
答案 2 :(得分:1)
您应该使用C的viewControllers
方法从导航控制器的viewDidAppear
数组中删除B.
var didRemoveB = false
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if !didRemoveB {
navigationController?.viewControllers.remove(atIndex: 1) //assuming B's index is 1
didRemoveB = true
}
}
答案 3 :(得分:0)
它有多种可能, 首先,您可以处理ViewController B何时消失并更改navigationController中的viewControllers堆栈
override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if (self.isMovingFromParentViewController()){
self.navigationController.viewControllers = viewControllers // your viewControllers stack
}
}
<强>更新强>
或弹出到root:
self.navigationController.popToRootViewControllerAnimated()
或弹出视图控制器,直到指定的视图控制器位于导航堆栈的顶部。:
self.navigationController.popToViewController(:animated:)