如何实现didSelectViewController

时间:2012-06-05 03:27:29

标签: objective-c uitabbarcontroller

当有人在标签之间切换时,我想抓住这个事件。我的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仍然没有开火。

3 个答案:

答案 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>