我對iOS開發相當陌生,我正在構建一個由UINavigationController和三個ViewControllers組成的應用程序,我將它們稱爲A,B和C.在segue期間從UINavigationController的導航堆棧中移除視圖控制器?
最初顯示視圖控制器A.從那裏,我有兩個工作流程:
A> C
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
不幸的是,我還沒有得到任何運氣得到這個才能正常工作。我確信我做錯了什麼,但我不確定還有什麼可以嘗試的。任何人都可以將我指向正確的方向嗎?謝謝!
退房這個職位http://stackoverflow.com/questions/10822857/is-it-possible-to-pop-the -uinavigationcontroller兩次。 – Adamsor
這是人們遇到的相當普遍的問題,但是對於我的(有限的)知識來說,沒有簡單的方法來修改內置後退按鈕的功能。你可以考慮繼承UINavigationController並覆蓋它的pop方法來檢查頂部視圖控制器是否爲C.如果是C,則用動畫彈出一次,然後再彈出一次而不用動畫。否則,只需彈出一次。 – Erik
'self.navigationController.popToRoot()'將解決您的問題 –