我正在尝试从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。
我在这里做错了什么?
修改
这是我的调试器的样子:
谢谢!
修改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];
答案 0 :(得分:14)
如果您将标签栏控制器作为根视图控制器,则可以像以下一样访问它:
UITabBarController *tabBarController = (UITabBarController *)appDelegate.window.rootViewController;
//扩展
根据您的问题的更新,您应该能够从上一个子视图控制器阵列引用标签栏控制器:
UITabBarController *tabBarController = (UITabBarController *)self.window.rootViewController.childViewControllers.lastObject;
答案 1 :(得分:-2)
从你的调试器我认为它应该是UITabBarController *tabBarController = appDelegate.tabBarController;