0

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

实现这一目标的最佳方法是什么?仅供参考,我不想要模式对话框,标签栏必须始终在下方可见。

4

1 回答 1

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
    }
}

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

于 2012-08-25T18:23:11.460 回答