导航返回到另一个视图控制器而不是它出现的控制器

时间:2017-09-04 08:45:46

标签: ios swift

是否可以更改UINavigationController的先前视图控制器?

假设我有三个嵌入UINavigationController的视图控制器(A,B,C)。点击A中的按钮按下B并点击B中的按钮将推送到C.现在,如果用户点击C的后退按钮,我想将用户直接重定向到A而不是B.

4 个答案:

答案 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:)