显示UITabBarController控制器列表中不存在的UIViewController

时间:2012-08-25 18:02:42

标签: iphone ios uitabbarcontroller

让我举个例子说明我想做什么: 我有一个包含4个TabBarItems的选项卡,因此它包含4个控制器。并且有一个控制器不能显示在标签栏的图标中,但是当触摸其中一个控制器中的一个按钮时,它将显示出来。因此,当它显示时,标签栏必须没有任何选定的标签,必须取消选择每个项目。它必须像幽灵控制器一样,没有显示在标签图标中,但实际上它是标签栏控制器中的控制器。

实现这一目标的最佳方法是什么? Fyi,我不想要一个模态对话框,标签栏必须始终在下面显示。

1 个答案:

答案 0 :(得分:0)

可能有用的一件事是知道标签之间何时发生转换。如果您在转换发生后立即显示幻影视图,则可能有足够的控制权来执行您想要的操作。

这是我如何做到的:首先,将类UITabBarController子类化为TabViewController(例如)。在TabViewController中,包含以下方法:

// Pass this message on to views so they know when transitions are occuring
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    UIViewController <UITabBarControllerDelegate> *obj;

    for ( obj in self.viewControllers ) {
        if ( [obj respondsToSelector:_cmd] ) {
            [obj tabBarController:tabBarController didSelectViewController:viewController];
        }
    }
}

设置每个选项卡式视图类以采用UITabBarControllerDelegate协议。然后,在每个类中包含一个这样的方法来“拦截”转换事件:

// This is called when a transition between tabs happens
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController {

    if ( [viewController isEqual:self] ) {
        // Transitioning to me

        // Do stuff
   }    

    else  {
        // Transitioning to someone else

        // Do stuff
    }
}

(注意:可能有更简洁的方法来实现这一点,但它对我来说一直很好......)