当有人在标签之间切换时,我想抓住这个事件。我的appdelegate文件中有以下两个函数:
- (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");
}
但NSLog(@"switching");
永远不会发射。 xcode向行uitbc.delegate = self;
发出警告"将appdelegate const__strong传递给不兼容类型ID的参数"。
我做错了什么?我只是按照这里找到的接受的答案,除了我实例化我的tabbarcontroller表单故事板:
how to get the event that switch tab menu on iphone
更新 根据skram的建议,我为我的appdelegate写了这个,但NSLOG(转换)仍然没有解决:
@interface johnAppDelegate : UIResponder <UITabBarControllerDelegate>
我还更新了我的didFinishLauchingWithOptions:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
tabBarController = self.window.rootViewController.tabBarController;
tabBarController.delegate = self;
[window addSubview:tabBarController.view];
}
好消息是什么都没有崩溃。我也不再关注不兼容类型的警告。但是,didSelectViewController仍然没有开火。
答案 0 :(得分:4)
在我的appdelegate.h文件中,我更改了行
@interface wscAppDelegate : UIResponder <UIApplicationDelegate>
到
@interface wscAppDelegate : UIResponder <UIApplicationDelegate,UITabBarControllerDelegate>
然后在viewDidLoad函数的CustomTabBarController中我添加了这些行:
wscAppDelegate *appDelegate = (wscAppDelegate *)[[UIApplication sharedApplication] delegate];
self.delegate = appDelegate;
然后在appdelegate.m文件中,我添加了这个函数
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
NSLog(@"hooray this works");
}
答案 1 :(得分:2)
我也很努力,但我的UITabBarNavigationController离AppDelegate很远,无法在那里设置它,实际让它工作的唯一方法就是在UITabBarController的viewDidLoad中执行 not 子类本身,但在其中:
-(void)viewDidLayoutSubviews {
[ super viewDidLayoutSubviews ];
self.delegate = self;
}
这解决了它。或者,您可以在任何标签栏控制的视图控制器中执行此操作,但这只是感觉不对。
答案 2 :(得分:0)
您需要AppDelegate符合 UITabBarControllerDelegate
协议。见下文..
@interface YourAppDelegate : UIResponder <UITabBarControllerDelegate>