IOS5ストーリーボードを使用しています。最初のビューコントローラーはTabBarController
です。view1とview2とview3とview4には4つの関係があります。では、view3のビューコントローラーを取得するにはどうすればよいですか?
私は試した:
[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];
しかし、それは機能しません...
最初の(ルート)ビューコントローラーはUITabBarControllerであるとおっしゃいましたが、ナビゲーションコントローラーとタブバーコントローラーを備えたビューコントローラーを参照しています。ビューコントローラの階層に混乱していませんか?
編集:
ルートビューコントローラーが実際には単なるタブバーコントローラーであり、3番目のタブを取得したい場合は、次のコードを使用します。
[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
[self.tabBarController setSelectedIndex:2];
この方法を試してください
任意の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];
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
}
}