从UIVIewController访问UITabBarController
我正在开发一个基于UITabbar和视图层次结构的应用程序,如下所示。
UITabBarController —-> UINavigationController —-> UIViewController
我需要从UIIVewController访问UITabBarController。 但是下面的属性总是返回nil。
self.tabBarController和self.navigationController.tabBarController
有没有一种方法来直接访问TabbarController从一个子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; }
随着您正在使用的层次:
我可以在没有问题的情况下访问ViewController
的UITabBarController
:
self.tabBarController
将您的自定义初始化移动到viewDidLoad
或viewDidAppear
那么对于你可以使用self.tabBarController
访问TabBarController
到达您的TabBarController的另一种方法是:
UITabBarController *tabBarController = (UITabBarController *)[[[UIApplication sharedApplication] delegate] window].rootViewController;
但是你的情况完全没有必要。
编辑:
如果你正在使用Xib,那么你已经在你的AppDelegate中以编程方式创build了一个TabBarController。 我相信你有这样的东西:
self.tabBarController = [[UITabBarController alloc] init];
然后你可以在你的ViewController中调用它:
AppDelegate *appDelegate = [[UIApplication sharedApplication] delegate] UITabBarController *tabBarController = appdelegate.tabBarController;
你做错了。
我有一个与你的应用程序相同。 我可以从viewDidLoad
访问tabbar。
尝试这个:
- (void)viewDidLoad { [super viewDidLoad]; [self.tabBarController setSelectedIndex:1]; }
希望这可以帮助.. :)