为什么以编程方式选择tabbarController索引不会调用委托方法

时间:2013-03-07 18:05:46

标签: delegates uitabbarcontroller uitabbar uitabbaritem

当我们触摸tabbarcontroller的tabbaritem时,会调用委托方法:

-(BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController;
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;

但是当尝试以编程方式执行相同的操作时,即

[self.tabbarController setSelectedIndex:selectedIndexNo];

[self.tabBarController setSelectedViewController:[self.tabBarController.viewControllers objectAtIndex:0]];

不调用委托方法。这是什么原因?

2 个答案:

答案 0 :(得分:5)

覆盖UITabBarController setSelectedIndex:

-(void)setSelectedIndex:(NSUInteger)selectedIndex
{
    //must call super function. 
    [super setSelectedIndex:selectedIndex];

    [self myMethod];
}

- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController
{
    [self myMethod];
}

答案 1 :(得分:0)

当您通过代码自己设置它们时,您知道这是调用委托方法的时间。所以无论你想做什么,你都可以在编程设置索引时完成。假设您要调用tabbardelegate上的方法aMethod。您可以在设置索引后立即调用该方法。

[self.tabbarController setSelectedIndex:selectedIndexNo];
[self aMethod];