I am developing an application based on UITabbar and the view hierarchy as follows.
UITabBarController —-> UINavigationController —-> UIViewController
I need to access the UITabBarController from the UIIVewController . But following properties always returns nil.
self.tabBarController and self.navigationController.tabBarController
Is there a way to access the Tabbarcontroller directly from a child viewController without using the AppDelegate ?
@implementation HomeViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
self.title = @"Home";
self.navigationItem.title = @"Home";
self.tabBarItem.image = [UIImage imageNamed:@"TabBarHome"];
UITabBarController *tab = self.tabBarController;
UITabBarController *tab1 = self.navigationController.tabBarController;
UITabBarController *tab2 = self.navigationController.presentingViewController;
}
return self;
}
Best Answer
With the hierachy that you are using:
I can acces without problem the
UITabBarController
from theViewController
with:Move your Custom initialization to
viewDidLoad
orviewDidAppear
Then for shure you can access
TabBarController
withself.tabBarController
Another way to arrive to your TabBarController is:
But it is totally unnecessary in your case.
EDIT:
If you are working with Xib, then you has been created a TabBarController programmatically in your AppDelegate. I'm sure you have something like:
Then you can call it in your ViewController: