是否有可能更改UINavigationController
的以前的视图控制器?导航回到另一个视图控制器,而不是从它出现
假设我有三个视图控制器(A,B,C)嵌入在UINavigationController
中。点击A中的按钮按下B,然后点击B中的按钮将会按下C。现在,如果用户点击C的后退按钮,我想直接将用户重定向到A而不是B.
是否有可能更改UINavigationController
的以前的视图控制器?导航回到另一个视图控制器,而不是从它出现
假设我有三个视图控制器(A,B,C)嵌入在UINavigationController
中。点击A中的按钮按下B,然后点击B中的按钮将会按下C。现在,如果用户点击C的后退按钮,我想直接将用户重定向到A而不是B.
您应该从C的viewDidAppear
方法中删除导航控制器的viewControllers
阵列中的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
}
}
像魅力一样工作。谢谢回答。 –
当然,是 -
self.navigationController?.popToViewController(viewControllerA, animated: true)
欲了解更多信息,请阅读documentation。
查看this SO question了解如何将其与后退按钮组合使用。
这也有效。要使用这一个,我需要将后退按钮更改为自定义后退按钮或更改后退按钮动作。因为如果用户交换返回它将显示第二个视图控制器。 –
let arrViewControllers: [Any]? = self.navigationController?.viewControllers
for controller: Any in arrViewControllers! {
if (controller is cVC) {
self.navigationController!.popToViewController(controller as! UIViewController, animated: true)
}
}
有可能在许多方式, 首先,你可以处理的时候你的ViewController B是上消失,navigationController
viewControllers的变化栈override func viewWillDisappear(animated : Bool) {
super.viewWillDisappear(animated)
if (self.isMovingFromParentViewController()){
self.navigationController.viewControllers = viewControllers // your viewControllers stack
}
}
UPDATE
或流行以root身份:
个self.navigationController.popToRootViewControllerAnimated()
或弹出视图控制器,直到指定的视图控制器是在导航堆栈:顶部
self.navigationController.popToViewController(:animated:)
第一显示您的代码询问问题。 –
使用unwind segue阅读:https://stackoverflow.com/questions/44513291/retrieving-stack-of-viewcontrollers-when-segueing-programatically/44513322#44513322 –
@ Gagan_iOS.There是没有必要的Code.it这么简单的问题并可以通过example.so解释为什么你需要检查代码? –