1

我試圖從導航控制器堆棧中以模態方式呈現視圖控制器,然後在解散後返回到特定的視圖控制器索引。這NavigationController是在UITabBarController返回導航模式解除後的控制器索引(無故事板)

我的應用程序是用XIB和編程導航控制器和標籤欄控制器編寫的。我不使用故事板。導航控制器導航全部通過self.navigationController.pushViewController(viewController: TabOnePageTwoViewController, animated: true)

這是我的視圖控制器配置。

RootTabBarController - >UINavigationController(rootViewController: TabOneController) - >TabOnePageOneController - >ModalView

的問題是,當我self.dismiss()從模態呈現視圖中,我返回到導航控制器,而不是其中介紹了模態的視圖的根,TabOneController

我在想這樣做的正確方法是從導航控制器堆棧中選擇視圖控制器,然後從右側選擇popToViewController

要做到這一點,我在想,在self.dismiss()完成塊我需要導航到我正確的視圖控制器。

let viewControllers = self.navigationController!.viewControllers 

    self.dismiss(animated: true, completion: { 
     for aViewController in viewControllers { 
      if(aViewController is TabOnePageTwoViewViewController){ 
       print("navigating back to page one now") 
       self.navigationController!.popToViewController(aViewController, animated: true); 
      } 
     } 
    }) 

`

不幸的是,這是行不通的。據我所知,self.navigationController不能從模態視圖內訪問。

如何解除其提供的模式後返回導航控制器索引?

我已經上傳了示例應用程序在以下網址到GitHub的:https://github.com/thexande/TabControllerAndNavigationControllerExample

如果你知道內IOS程序化的導航好,下載看一看!

謝謝大家!

回答

1

我看過你的示例項目Github

只有一個小問題,爲什麼你的示例項目無法正常工作。

您應該在RootTabBarViewControllerviewDidLoad方法中設置navigationStack,而不是viewWillAppear。這是一些奇怪的行爲,也許是框架中的一個錯誤,我找不到任何文檔,爲什麼它應該在那裏發生,但它確實存在。

所以刪除viewWillAppear和你viewDidLoad應該看看以下內容:

override func viewDidLoad() { 
     super.viewDidLoad() 
     self.delegate = self 
     let tabOne = UINavigationController(rootViewController: TabOneViewController()) 
     tabOne.title = "Tab One" 
     let tabTwo = UINavigationController(rootViewController: TabTwoViewController()) 
     tabTwo.title = "Tab Two" 
     self.viewControllers = [tabOne, tabTwo] 
} 
+0

幹得好先生。您的解決方案工作完美 – thexande

相關問題