2017-09-04 34 views
1

是否有可能更改UINavigationController的以前的視圖控制器?導航回到另一個視圖控制器,而不是從它出現

假設我有三個視圖控制器(A,B,C)嵌入在UINavigationController中。點擊A中的按鈕按下B,然後點擊B中的按鈕將會按下C。現在,如果用戶點擊C的後退按鈕,我想直接將用戶重定向到A而不是B.

+0

第一顯示您的代碼詢問問題。 –

+0

使用unwind segue閱讀:https://stackoverflow.com/questions/44513291/retrieving-stack-of-viewcontrollers-when-segueing-programatically/44513322#44513322 –

+0

@ Gagan_iOS.There是沒有必要的Code.it這麼簡單的問題並可以通過example.so解釋爲什麼你需要檢查代碼? –

回答

1

您應該從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 
     } 
} 
+0

像魅力一樣工作。謝謝回答。 –

1

當然,是 -

self.navigationController?.popToViewController(viewControllerA, animated: true) 

欲瞭解更多信息,請閱讀documentation

查看this SO question瞭解如何將其與後退按鈕組合使用。

+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) 
     } 
    } 
0

有可能在許多方式, 首先,你可以處理的時候你的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:) 
相關問題