簡體   English   中英

如何使用單獨的故事板以編程方式正確設置UITabBarController

[英]How to properly set up UITabBarController programmatically with separate storyboards

我的項目中有三個情節提要。 有一個主要的和兩個獨立的工作流情節提要。 每個情節提要板都嵌入其自己的導航控制器中。

由於將情節提要板分為工作流程,因此我必須以編程方式將每個工作流程添加到選項卡欄。 這工作正常。

當我嘗試將視圖(工作流內)推入工作流導航控制器時,會發生我的問題。 似乎從未使用過用於工作流的導航控制器。 我通過更改每個工作流程的導航欄顏色來驗證了這一點。

我嘗試了兩個選項,每個選項都在工作流上設置。

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    let mainStoryboard = UIStoryboard(name: "Workflow 1", bundle: nil)
    let actionItemStoryboard = UIStoryboard(name: "Workflow 2", bundle: nil)

    let workflow1Controller = mainStoryboard.instantiateViewController(withIdentifier: "navigationController1")
    let workflow1TabItem = UITabBarItem(title: "Item 1", image: nil, selectedImage: nil)
    workflow1Controller.tabBarItem = workflow1TabItem

    let workflow2Controller = actionItemStoryboard.instantiateViewController(withIdentifier: "workflow2")
    let workflow2TabItem = UITabBarItem(title: "Item 2", image: nil, selectedImage: nil)
    workflow2Controller.tabBarItem = workflow2TabItem

    self.viewControllers = [workflow1Controller, workflow2Controller]
}

選項1

將選項卡視圖控制器設置為指向導航控制器(很確定這是不正確的,但是我進行了測試)。 這將顯示我想要的視圖,但不顯示導航項(后退按鈕)。

推送導航控制器時出錯


選項2

將選項卡視圖控制器設置為指向列表視圖(請參見下面的屏幕截圖)。 這將顯示后退按鈕,但是在單擊單元格時,最后的視圖將顯示在選項卡的“上方”。

推送列表視圖時出錯


主故事板 在此處輸入圖片說明

工作流程1故事板 工作流程1故事板

工作流程2故事板 工作流程2故事板

為了解決這個問題,我最終做了以下工作:

  • 從工作流程中刪除導航控制器
  • 創建一個“ MockTabController”(只是一個UIViewController,其UITabBar放置在視圖的底部)

現在,我有了一個帶有UITabBar的UIViewController,我可以讓每個工作流視圖擴展該視圖而不是UIViewController,因此選項卡欄在我的整個應用程序(我想要的位置)上都是一致的。

對於工作流具有UITableViewController的實例,我只是將UITableViewController嵌入到ViewController中作為子視圖。 然后,ViewController擴展了我的MockTabController,結果是一個帶標簽欄的TableViewController,不需要任何修改即可工作。

為了簡化整個應用程序中的導航,我只需要將導航堆棧重置回Tab控制器的開頭即可。 單擊選項卡欄項將展開所有工作流程,然后推動新工作流程的開始。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM