我正在使用Swift3。我有一个与风险投资的应用程序,如图所示。
在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。
我尝试过从网络上组合各种解决方案,没有成功。 这可能吗?
答案 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)
})