How to implement didSelectViewController
objective-c, uitabbarcontroller
Solution
in my appdelegate.h file, I changed the line
@interface wscAppDelegate : UIResponder <UIApplicationDelegate>
to
@interface wscAppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>
Then in my CustomTabBarController in the viewDidLoad function i added these lines:
wscAppDelegate *appDelegate = (wscAppDelegate *)[[UIApplication sharedApplication] delegate];
self.delegate = appDelegate;
Then in appdelegate.m file, I added this function
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"hooray this works");
}
Problem
I want to catch the event when someone switches between tabs. I have the following two function in my appdelegate file: ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { UITabBarController * uitbc = [storyboard instantiateViewControllerWithIdentifier:@"tabbarcontroller"]; uitbc.delegate = self; [self.window addSubview:uitbc.view]; return YES; } - (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController { NSLog(@"switching"); } ``` But the `NSLog(@"switching");` never fires. The xcode issues a warning for the line `uitbc.delegate = self;` saying "Passing appdelegate const__strong to parameter of incompatible type id". What am I doing wrong? I'm just following the accepted answer found here, except i'm instantiating my tabbarcontroller form story board: how to get the event that switch tab menu on iphone Update Based on skram's suggestion, I wrote this for my appdelegate but the NSLOG(Switching) still doesn't fire: ``` @interface johnAppDelegate : UIResponder <UITabBarControllerDelegate> ``` I also updated my didFinishLauchingWithOptions: ``` - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { tabBarController = self.window.rootViewController.tabBarController; tabBarController.delegate = self; [window addSubview:tabBarController.view]; } ``` Good thing is that nothing crashes. I also no longer et the warning about incompatible types. But still, didSelectViewController doesn't fire.