是否有可能更改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解釋爲什麼你需要檢查代碼? –