简体   繁体   中英

Accessing UITabBarController from UIVIewController

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;
}

With the hierachy that you are using:

在此处输入图片说明

I can acces without problem the UITabBarController from the ViewController with:

self.tabBarController

Move your Custom initialization to viewDidLoad or viewDidAppear

Then for shure you can access TabBarController with self.tabBarController

Another way to arrive to your TabBarController is:

UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] delegate] window].rootViewController;

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:

self.tabBarController = [[UITabBarController alloc] init];

Then you can call it in your ViewController:

AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate];
UITabBarController *tabBarController = appDelegate.tabBarController;

You are doing it wrong.

I've an app same as yours. I can access tabbar from viewDidLoad .

Try this:

- (void)viewDidLoad {
    [super viewDidLoad];
    [self.tabBarController setSelectedIndex:1];
}

Hope this helps.. :)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM