在导航控制器中更改顺序

时间:2017-01-27 09:06:50

标签: ios uiviewcontroller uinavigationcontroller swift3

我正在使用Swift3。我有一个与风险投资的应用程序,如图所示。

enter image description here

在Mainmenu-VC中,用户触发Input-segue。用户在Input-VC中输入名字。这会触发Select-segue to Select-VC选择姓氏并触发Selected-segue到Details-VC。

在Mainmenu-VC中,用户还可以访问Details-VC。通过NavigationControllerMechanism返回Mainmenu-VC。

我想更改NavigationControllerMechanism'历史',以便当用户通过Selected-segue从Details-VC进入时,先前的VC从Select-VC更改为Mainmenu-VC。 所以基本上在Details-VC中,Back总是返回Mainmenu-VC。

我尝试过从网络上组合各种解决方案,没有成功。 这可能吗?

2 个答案:

答案 0 :(得分:3)

是的。

View-Controller堆栈存储在currentViewController.navigationController?.viewControllers中。

所以你应该做类似的事情:

//In Your Details VC :

override func viewDidAppear(_ animated: Bool) {

    super.viewDidAppear(animated)
    guard let stack = self.navigationController?.viewControllers else { return }
    //get the mainMenu VC 
    let mainVC = stack.first!
    // Rearrange your stack
    self.navigationController?.viewControllers = [mainVC, self]

    //Now you can press "bac" to Main VC

}

答案 1 :(得分:0)

您希望以这种方式更改导航堆栈,您可以操作

let myprofile = storyboard.instantiateViewController(withIdentifier: "Profile1ViewController") as! Profile1ViewController
   let sourseStack = self.navigationController!.viewControllers[0];
       var controllerStack = self.navigationController?.viewControllers

        let index = controllerStack!.index(of: sourseStack);
        controllerStack![index!] = myprofile

        self.navigationController!.setViewControllers(controllerStack!, animated: false);

转到RootViewController

 dispatch_async(dispatch_get_main_queue(), {
                    self.navigationController?.popToRootViewControllerAnimated(true)
                })