2012-05-21 26 views
11

私はiOS5ストーリーボードを使用しています。私の最初のビューコントローラーはTabBarControllerです。view1に4つのリレーションシップがあります& view2 & view3 & view4、view3のビューコントローラーはどのように取得できますか?AppDelegateのTabBarControllerからViewControllerを取得するにはどうすればよいですか?

私が試した:

[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2]; 

しかし、それは動作しません...

答えて

30

をあなたの初期(ルート)ビューコントローラがUITabBarControllerであることを言ったが、あなたとビューコントローラを参照していますタブコントローラを備えたナビゲーションコントローラ。 View Controllerの階層構造が混乱していますか?

編集:

ルートビューコントローラは、実際には、タブバーのコントローラであり、あなたがここに第三のタブを取得したい場合は、コードです:

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2]; 
+0

を確認することができます 'のUIViewController' の目に見える@interfaceを宣言していませんセレクタ 'viewControllers' –

+2

はい、動作します。私はとても愚かです。 UITabBarController * tabBarController =(UITabBarController *)self.window.rootViewController; –

9
[self.tabBarController setSelectedIndex:2]; 
+2

これまでにない最小限の答えは、これはtabBarControllerを取得するための最も簡単で最善の方法です。 UITabBarControllerは、ビューが1つの場合はUITabBarControllerを返し、そうでない場合はNULLを返すカテゴリをUIViewControllerに追加します。 –

+1

選択したインデックスにオブジェクト(ビューコントローラ)を表示する方法はありますか? –

7

この方法を試してみては

任意のビューコントローラ内

YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3]; 

これはあなたのビューコントローラオブジェクトを返します。あなたのビューコントローラにキャストし、それを使用する準備が整いました。 run and go

+0

この回答のSwift 3版は何ですか? –

3
UIViewController *loginViewController=self.window.rootViewController; 

    UITabBarController *controller=loginViewController.tabBarControllerObj; 

    UIViewController *selectedController=controller.selectedViewController; 

これから、選択したビューコントローラが表示されます。すべてのビューコントローラを取得するだけで

NSArray *viewControllers = [controller viewControllers]; 
0

スウィフト4.0

を交換
let viewC = self?.tabBarController.viewControllers.first // will give single Navigation Controller on index 0 
let viewC = self?.tabBarController?.viewControllers// will give array of Navigation Controller 

については

さらにあなたが可視のViewController

if let nav = viewC as? UINavigationController { 
    if nav.visibleViewController is YourViewControllerName{ 
     // Do Code 
    } 
} 
関連する問題