2017-03-27 13 views
1

私はこの問題を完全に困惑しています。UINavigationController(ストーリーボード)からUIViewControllerにプログラムで分割する方法

私は、View Controllerが主にストーリーボード上に作成されているアプリを持っています。しかし、 コードで完全に(プログラムによって)作られているものがいくつかあります。

私のアプリケーションのエントリポイントは、独自のUIViewControllerを持つ多くの異なるナビゲーションコントローラにフィードを張るTabBarControllerです。ここで

は視覚的な表現です: enter image description here

私は何の問題タブバーのアイテムを使用して(ストーリーボードに表示されている)適切なビューコントローラのいずれかに移動していません。 しかし、UIViewControllerがコード全体を使って構築されているため、ストーリーボード上に直接セグを持たないタブバーアイテムを選択すると、適切なクラスにセグメンテーションできません。

ViewDidLoad()関数を持つNavigationControllerに* .swiftクラスを追加しました。この関数は、適切なタブバー項目を選択すると決して呼び出されません。 奇妙な部分は、(ストーリーボードに表示された)UIViewControllerに接続され、* .swiftファイルが添付されている単一のナビゲーションコントローラがあることです。適切なTab Bar Itemが選択されると、そのViewDidLoad()が呼び出されます。 複数の* .swiftファイル(すべてUINavigationControllerを継承しています)を添付しようとしましたが、適切なViewDidLoad()関数を呼び出すための単一のものを取得できません。

編集:画像のように、左下のナビゲーションコントローラには、そこから延びるセグがありません。しかし、それに接続されているクラスがあり、あなたが見ることができるようにセグエが行わ

class WeaponsNavController: UINavigationController 
{ 

    override func viewDidLoad() 
    {   
     self.navigationController?.pushViewController(WeaponsTableVC(), animated: true) 
    } 

} 

を取るところそののviewDidLoad()関数があるの内側に、私は、ビューコントローラであるWeaponsTableVC()に接続しようとしています完全にコードによって作成されます。しかし、このクラスは、ストーリーボードのナビゲーションコントローラに直接接続されているにもかかわらず、まったく呼び出されないようです。

+0

プログラム可能なビューコントローラをタブバーコントローラに追加するコードを表示できますか?また、どのナビゲーションコントローラーを2番目のパラグラフの始めに参照していますか?プログラムで作成されたもの、またはルートビューコントローラなしのストーリーボードのもの? – Mark

答えて

0

ビューコントローラに関連付けられたnibファイルがない場合、このメソッドはプレーンなUIViewオブジェクトを代わりに作成します。 ビューコントローラをインスタンス化するときにnibファイルを指定しないと、UIViewControllerはloadView()メソッドを呼び出してプレーンなUIViewオブジェクトを作成し、それをそのviewプロパティに割り当てます。

// Assuming TestViewController is the view to load 
let viewController = TestViewController() 
navigationController?.pushViewController(viewController, animated: true) 

これが役に立ちます。

関連する問題