Доступ к UITabBarController из UIVIewController

Я разрабатываю приложение на основе UITabbar и иерархии представлений следующим образом.

UITabBarController ---- > UINavigationController ---- > UIViewController

Мне нужно получить доступ к UITabBarController из UIIVewController. Но следующие свойства всегда возвращают nil.

self.tabBarController и self.navigationController.tabBarController

Есть ли способ получить доступ к элементу управления Tabbar непосредственно из дочернего viewController без использования 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;
}

Ответы

Ответ 1

С помощью иерархии, которую вы используете:

enter image description here

Я без проблем могу получить UITabBarController из ViewController с помощью

self.tabBarController

Переместите свою пользовательскую инициализацию на viewDidLoad или viewDidAppear

Затем для shure вы можете получить доступ к TabBarController с помощью self.tabBarController

Еще один способ добраться до вашего TabBarController:

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

Но это совершенно необязательно в вашем случае.

EDIT:

Если вы работаете с Xib, то вы создали TabBarController программно в своем AppDelegate. Уверен, у вас есть что-то вроде:

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

Затем вы можете вызвать его в своем ViewController:

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

Ответ 2

Вы делаете это неправильно.

У меня такое же приложение, как и у вас. Я могу открыть вкладку с viewDidLoad.

Попробуйте следующее:

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

Надеюсь, это поможет..:)