2016-12-05 88 views
0

我對iOS開發相當陌生,我正在構建一個由UINavigationController和三個ViewControllers組成的應用程序,我將它們稱爲A,B和C.在segue期間從UINavigationController的導航堆棧中移除視圖控制器?

最初顯示視圖控制器A.從那裏,我有兩個工作流程:

  1. A> C

  2. A> B> C

在第二工作流中,我已經定義shouldPerformSegue(withIdentifier )在視圖控制器B上。在這個方法的內部,我需要做一些工作來決定是否應該顯示視圖控制器C或取消搜索並顯示錯誤消息。假設沒有發生錯誤,則執行查看控制器C的繼續。當顯示視圖控制器C時,後退按鈕指向視圖控制器B,但我需要它指向視圖控制器A.

我試圖通過調用在shouldPerformSegue(withIdentifier)的端部下面從導航堆棧去除視圖控制器B只是返回true,以允許SEGUE進行之前:

self.navigationController?.viewControllers.remove(at: index) 

如果我讀正確的文檔,視圖控制器的索引中刪除對應於以下:

The root view controller is at index 0 
The back view controller is at index n-2 
The top view controller is at index n-1 

不幸的是,我還沒有得到任何運氣得到這個才能正常工作。我確信我做錯了什麼,但我不確定還有什麼可以嘗試的。任何人都可以將我指向正確的方向嗎?謝謝!

+0

退房這個職位http://stackoverflow.com/questions/10822857/is-it-possible-to-pop-the -uinavigationcontroller兩次。 – Adamsor

+0

這是人們遇到的相當普遍的問題,但是對於我的(有限的)知識來說,沒有簡單的方法來修改內置後退按鈕的功能。你可以考慮繼承UINavigationController並覆蓋它的pop方法來檢查頂部視圖控制器是否爲C.如果是C,則用動畫彈出一次,然後再彈出一次而不用動畫。否則,只需彈出一次。 – Erik

+0

'self.navigationController.popToRoot()'將解決您的問題 –

回答

2

您可以使用此:

var viewControllers = navigationController?.viewControllers 

viewControllers?.removeLast(2) //here 2 views to pop index numbers of views 

navigationController?.setViewControllers(viewControllers!, animated: true) 

可以去除這樣也..

0

您可以創建自定義的後退按鈕並在其touchUpInside事件,你可以彈出特定的視圖控制器。

要彈出特定的視圖控制器,你可以使用此代碼:

your_navigationController?.popToViewController(YourViewControllerObject, animated: true) 
相關問題