2016-02-21 3 views
5

私はUITabBarControllerにアクセスする必要があり、appDelegateから2番目のサブビューにアクセスする必要があります。UISplitview:appDelegateからUITabBarControllerにアクセス

Storyboard with UISPlitViewCOntroller as root

これは私がapplicationDidEnterBackgroundにしようとしたものです:

 let splitViewController = self.window!.rootViewController as! UISplitViewController 
    let leftNavController = splitViewController.viewControllers.first as! UINavigationController 
    let tabController = leftNavController.tabBarController! as UITabBarController 
    let controllers : Array = tabController.viewControllers! 
    print("viewcontrollers \(controllers)") 

アプリがクラッシュし、tabControllerがnilであると文句。私はストーリーボードからUINavigationコントローラを削除した場合、UITabBarControllerはで簡単にアクセスされた:

let tabController = splitViewController.viewControllers.first as! UITabBarController 

UISplitViewがルートであるUITabBarControllerのchildcontrollersにアクセスするための正しい方法は何ですか?

+0

:-) appDelegateからそのメソッドを実行することができますタブバーのコントローラで?あなたのアプリのナビゲーションをどのようにしたいのか説明できますか? –

+0

申し訳ありませんが、私はストーリーボード全体を表示しませんでした。 tabbarcontrollerに接続されているビューは、detailviewController(splitview detailviewcontroller)のsegeusを持つtableviewsです。 UINavigationControllerを削除すると、detailviewsにはナビゲーションバーに異なるボタンと戻るボタンが表示されなくなります。 –

答えて

4

最後に解決策が見つかりました。私はこのようなナビゲーションコントローラの「childViewControllers」を使用する必要がありました:

let splitViewController = self.window!.rootViewController as! UISplitViewController 
let leftNavController = splitViewController.viewControllers.first as! UINavigationController 
let tabController = leftNavController.childViewControllers.first as! UITabBarController 
let viewControllers : Array = tabController.viewControllers! 
print("viewControllers \(viewControllers)") 

を今、私は簡単にviewControllersのいずれかにアクセスし、ナビゲーションコントローラが続いていないのはなぜ

1

ではなく、ナビゲーションコントローラであなたのタブバーコントローラを埋め込む、あなたはこのように、自分のナビゲーションコントローラに子ビューコントローラを埋め込む必要があります。

Split View -> Tab Bar -> Navigation Controller #1 -> View Controller 
         -> Navigation Controller #2 -> View Controller 

これは、中にタブバーを使用する正しい方法です。ナビゲーションコントローラとの組み合わせ。

+0

それは問題を解決していないようです。さて、私はサブビューにアクセスできますが、detailviewsは "バックボタン"なしで表示されます。また、それらはモーダル(下から上に上がってくる)のように見えますが、ナビゲーションコントローラにテーブルビューを埋め込んでいます。 –

+0

ああ、大丈夫。さて、あなたの問題を解決してうれしいです:) –