web-dev-qa-db-ja.com

AppDelegateのTabBarControllerからViewControllerを取得するにはどうすればよいですか?

IOS5ストーリーボードを使用しています。最初のビューコントローラーはTabBarControllerです。view1とview2とview3とview4には4つの関係があります。では、view3のビューコントローラーを取得するにはどうすればよいですか?

私は試した:

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

しかし、それは機能しません...

12

最初の(ルート)ビューコントローラーはUITabBarControllerであるとおっしゃいましたが、ナビゲーションコントローラーとタブバーコントローラーを備えたビューコントローラーを参照しています。ビューコントローラの階層に混乱していませんか?

編集:

ルートビューコントローラーが実際には単なるタブバーコントローラーであり、3番目のタブを取得したい場合は、次のコードを使用します。

[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
31
Dima
[self.tabBarController setSelectedIndex:2];
9
Haider

この方法を試してください

任意のViewControllerで

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

これにより、そのView Controllerオブジェクトが返されます。ViewControllerにキャストすると、使用する準備が整います。実行して実行

   UIViewController *loginViewController=self.window.rootViewController;

   UITabBarController *controller=loginViewController.tabBarControllerObj;

   UIViewController *selectedController=controller.selectedViewController;

これから、選択したビューコントローラを取得します。

すべてのViewControllerを入手するには、交換するだけです

NSArray *viewControllers = [controller viewControllers];
3
vilas

Swift 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

さらに、VisibleViewControllerを確認できます

if let nav = viewC as? UINavigationController {
   if nav.visibleViewController is YourViewControllerName{
        // Do Code
     }
}
1
Gurjinder Singh