Доступ к 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];
}
Надеюсь, это поможет..:)