0

私のプロジェクトには3つのストーリーボードがあります。メインと2つのワークフローストーリーボードがあります。各ストーリーボードは、独自のナビゲーションコントローラに組み込まれています。別々のストーリーボードでUITabBarControllerをプログラムで正しく設定する方法

私はストーリーボードをワークフローに分割しているので、プログラムによって各ワークフローをタブバーに追加する必要があります。これは正しく動作しています。

私の問題は、(ワークフロー内の)ビューをワークフローナビゲーションコントローラにプッシュしようとすると発生します。ワークフローのナビゲーションコントローラは決して使用されていないようです。ワークフローごとにナビゲーションバーの色を変更することでこれを確認しました。

2つのオプションを試しましたが、それぞれワークフローで設定しました。

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

(かなり確信して、これは間違っているが、私が行ったテストだった)ナビゲーションコントローラを指すように、タブ・ビュー・コントローラを設定します。これにより、ナビゲーションアイテムを表示する方法は表示されません(戻るボタン)。

Error pushing navigation controller


リストビューを指すようにタブ・ビュー・コントローラの設定オプション2

(以下のスクリーンショットを参照)。これにより、戻るボタンが表示されますが、セルをクリックすると、最後のビューがタブの上に表示されます。

Error pushing list view


メインストーリーボード enter image description here

ワークフロー1ストーリーボード Workflow 1 Storyboard

ワークフロー2ストーリーボードこれを解決するために10 Workflow 2 Storyboard

+0

UITabBarControllerに埋め込まれたUINavigationControllerは必要ありません。あなたのタブにそれらを置いても問題ありません。次に、各タブには独自のナビゲーションがあります。 –

+0

新しい「メインストーリーボード」のイメージをご覧ください。ここで私の例をあまりにも曖昧にして、単純化しようとしました。私は実際にそこにナビゲーションコントローラも実際に必要です。 – sargturner

+1

私はUITabBarControllerをナビゲーションコントローラ内に置くことはサポートされているオプションだとは思わない。 4つの方法のリストについては、https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/ViewControllerCatalog/Chapters/TabBarControllers.html#//apple_ref/doc/uid/TP40011313-CH3-SW2を参照してください。タブバーコントローラを使用します。 (はい、あなたは何かをしようとすることができますが、UI標準と戦わない方が良いです。) –

答えて

0

は私がやってしまった次

  • 底部に配置UITabBarで「MockTabController」(ただのUIViewControllerを作成したワークフロー
  • からナビゲーションコントローラを削除しますビューの)

今、私はUITabBarとのUIViewControllerを持っていることを、私は、各ワークフロービューは、このビューの代わりのUIViewControllerを拡張することができますので、タブバーが自分のアプリケーション全体で一貫している(私はそれをしたい場所)。

ワークフローがUITableViewControllerを持つ場合、私は単純にUITableViewControllerをViewController内に子ビューとして埋め込みます。ViewControllerは次に私のMockTabControllerを拡張し、結果はTableViewControllerであり、タブバーは変更する必要はありません。

アプリ全体のナビゲーションを簡単にするため、タブスタックコントローラの先頭に戻ります。タブバー項目をクリックすると、すべてのワークフローが巻き戻され、新しいワークフローの開始がプッシュされます。

関連する問題