从Appdelegate访问UITabBarController

时间:2014-03-29 17:26:41

标签: ios objective-c

我正在尝试从UIWindow中的UIViewController访问我的UiTabBarController,

由于它不属于UITabBarController - 使用self.tabBarController..不会起作用,因为它将是零。

所以我尝试了这段代码:

BBAppDelegate *appDelegate = (BBAppDelegate *)[[UIApplication sharedApplication] delegate];

    UITabBarController *tabBarController = appDelegate.window.rootViewController.tabBarController;

当它使用调试器逐步执行代码时 - 我可以看到appDelegate确实有一个tabBarController,它不是nil。但是在下一行

  UITabBarController *tabBarController = appDelegate.window.rootViewController.tabBarController;

这导致tabBarController实例为零,tabBarController中的appDelegate仍然分配了一个内存地址,而不是nil。

我在这里做错了什么?

修改

这是我的调试器的样子:

enter image description here 谢谢!

修改2

这是我设置添加到rootViewController

的侧边菜单的人
UIStoryboard *mainStoryboard = [UIStoryboard storyboardWithName:@"Main_iPhone"
                                                         bundle: nil];

BBFilterViewController *loginController=[[UIStoryboard storyboardWithName:@"Main_iPhone" bundle:nil] instantiateViewControllerWithIdentifier:@"FilterViewController"];  UINavigationController *navController=[[UINavigationController alloc]initWithRootViewController:loginController];



self.tabBarController = [mainStoryboard instantiateViewControllerWithIdentifier: @"HomeScreen"];

MVYSideMenuOptions *options = [[MVYSideMenuOptions alloc] init];
options.contentViewScale = 1.0;
options.contentViewOpacity = 0.5;
options.shadowOpacity = 0.0;

MVYSideMenuController *sideBarController = [[MVYSideMenuController alloc]initWithMenuViewController:navController contentViewController:self.tabBarController options:options];


self.window.rootViewController = sideBarController;

[self.window.rootViewController addChildViewController:self.tabBarController];

[self.window makeKeyAndVisible];

2 个答案:

答案 0 :(得分:14)

如果您将标签栏控制器作为根视图控制器,则可以像以下一样访问它:

UITabBarController *tabBarController = (UITabBarController *)appDelegate.window.rootViewController;

//扩展

根据您的问题的更新,您应该能够从上一个子视图控制器阵列引用标签栏控制器:

UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController.childViewControllers.lastObject;

答案 1 :(得分:-2)

从你的调试器我认为它应该是UITabBarController *tabBarController = appDelegate.tabBarController;