【发布时间】:2020-02-13 11:50:33
【问题描述】:
我已经用UITabBarDelegate 设置了我的class 并实现了它的method didSelectItem 以检测何时按下某个tabBar 项目。效果很好。在每个tabBar 项目中,我有一个containerView,如果用户未登录,则可以显示“您必须登录”页面,另一个containerView 显示viewControllers,嵌入在navigationController .
我想跟踪当前tab 项目中显示的viewController,和/或该tab 的root viewController。
我尝试了许多不同的方法,但大多数都返回 nil 或者我无法让它工作。我认为整个container 的情况使它更难处理。
看起来像这样:
@interface MyTabBarController () <UITabBarDelegate>
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item {
NSUInteger indexOfTab = [[tabBar items] indexOfObject:item];
switch (indexOfTab) {
case 0: {
NSLog(@"????PRESSIIING %lu", (unsigned long)[[tabBar items] indexOfObject:item]);
break;
}
case 1: {
NSLog(@"????PRESSIIING %lu", (unsigned long)[[tabBar items] indexOfObject:item]);
break;
}
case 2: {
NSLog(@"????PRESSIIING %lu", (unsigned long)[[tabBar items] indexOfObject:item]);
//These return nil
NSLog(@"????AAAAAA %@", ((UINavigationController*)_appD.window.rootViewController).visibleViewController);
NSLog(@"????AAAAAA %@", ((UITabBarController*)_appD.window.rootViewController).selectedViewController);
NSLog(@"????AAAAAA %@", self.navigationController.topViewController);
NSLog(@"????AAAAAA %@", self.navigationController.visibleViewController);
//This returns with a value, but can't get it to work with conditionals, that is, when I'm in root, the else is triggered
NSLog(@"????AAAAAA %@", self.tabBar.window.rootViewController);
if(!self.tabBar.window.rootViewController) {
NSLog(@"????????????THIS IS NOT ROOT????????????");
}else {
NSLog(@"????????????this is ROOT????????????");
}
// This returns nil
((UINavigationController*)_appD.window.rootViewController).visibleViewController;
((UITabBarController*)_appD.window.rootViewController).selectedViewController;
//Doesn't work
if([self.navigationController.viewControllers[0] isKindOfClass:[ExperiencesListViewController class]]) {
NSLog(@"????IS KIND OF CLASS LIST");
}
if([self.navigationController.viewControllers[0].childViewControllers isKindOfClass:[ExperiencesContainerViewController class]]) {
NSLog(@"????IS KIND OF CLASS CONTAINER");
}
break;
}
case 3: {
NSLog(@"????PRESSIIING %lu", (unsigned long)[[tabBar items] indexOfObject:item]);
break;
}
case 4: {
NSLog(@"????PRESSIIING %lu", (unsigned long)[[tabBar items] indexOfObject:item]);
break;
}
default:
break;
}
}
So, what else can I try? Seems like I have to use `self.tabBar.window.rootViewController` in some way, no?
***EDIT***
Oh, and I have tried the `tabBarController` delegate but that doesn't trigger. Also, the `tabBar` is constructed programmatically if that helps.
【问题讨论】:
-
“跟踪”是什么意思?你想知道什么,什么时候想知道?
标签: ios objective-c uitabbar rootviewcontroller