Я настроил class
с помощью UITabBarDelegate
и внедрил его method
didSelectItem
, чтобы определять, когда нажимается определенный элемент tabBar
. Работает отлично. В каждом элементе tabBar
есть одна containerView
, на которой может отображаться страница «Вы должны войти в систему», если пользователь не вошел в систему, и другая containerView
, представляющая viewControllers
, встроенная в navigationController
,
Я бы хотел отслеживать viewController
, представленный в текущем элементе tab
, и / или root
viewController
этого tab
.
Я пробовал несколько разных подходов, но большинство из них возвращает ноль, или я не могу заставить его работать. Я думаю, что вся ситуация 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.