I have a tabBar
that is implemented programmatically. I would like to be able to track if the user press a certain tabBar
item (or button or whatever it's called). As far as I understand, this is done by inheriting from the UITabBarControllerDelegate
class.
If I implement the UITabBarControllerDelegate
code in one of the classes that the tabBar
items navigates to, the didSelectViewController
method works:
@interface ExperiencesContainerViewController () <ContainerProtocol, UITabBarControllerDelegate>
@implementation ExperiencesContainerViewController
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {
NSLog(@"PRESS");
}
- (void)viewDidLoad {
[super viewDidLoad];
self.tabBarController.delegate = self;
}
Now this works, but it works a bit too well as it triggers not only when I press the item of this particular class
but whichever item I happen to press, even though those items navigate to a completely different class.
I would like the method
to trigger only when I press the tabBar
item of this particular class. And then I guess I would replicate this pattern in the other classes
as well and have those methods trigger only when their respective tabBar
item is pressed.
I read this:
Detect when a tab bar item is pressed
And the answer suggests that I should implement the UITabBarControllerDelegate
in the class
that handles the setup of the tabBar
. I tried that but then the method
isn't triggered. I think this has to do with the delegate
suddenly being set to a class
that is not associated with one of the tabBar
items.
Let me know if there is additional information you need or if you need to see some more code.