Reputation: 564
I use iOS5 storyboard, and my initial view controller is TabBarController
, there are four relationships to view1 & view2 & view3 & view4, so, how can I get the view3's view controller?
I tried:
[[[[self.window.rootViewController navigationController] tabBarController] viewControllers] objectAtIndex:2];
But it doesn't work...
Upvotes: 12
Views: 43706
Reputation: 10299
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
Further you can check the Visible ViewController
if let nav = viewC as? UINavigationController {
if nav.visibleViewController is YourViewControllerName{
// Do Code
}
}
Upvotes: 5
Reputation: 31
UIViewController *loginViewController=self.window.rootViewController;
UITabBarController *controller=loginViewController.tabBarControllerObj;
UIViewController *selectedController=controller.selectedViewController;
From this you will get selected view controller.
For getting all view controller just replace
NSArray *viewControllers = [controller viewControllers];
Upvotes: 3
Reputation: 23634
You said that your initial (root) view controller is a UITabBarController but you are referring to a view controller with a navigation controller with a tab bar controller. Are you getting mixed up in your view controller hierarchy?
edit:
if your root view controller is actually just a tab bar controller and you want to get the 3rd tab here is the code:
[[((UITabBarController *)self.window.rootViewController) viewControllers] objectAtIndex:2];
Upvotes: 35
Reputation: 6631
Try this way
In any view controller
YourViewController *yourViewController= (YourViewController*) [self.tabBarController.viewControllers objectAtIndex:3];
this return your that view controller object.Cast it to your view controller and you are ready to use that. run and Go
Upvotes: 7