让我举个例子,我想做什么:我有一个有 4 个 TabBarItems 的选项卡,所以它包含 4 个控制器。并且有一个控制器不能显示在标签栏的图标中,但是当触摸这 4 个控制器之一内的按钮时,它会显示。因此,当它显示时,选项卡栏不能有任何选定的选项卡,必须取消选择每个项目。它必须像一个不在选项卡图标中显示的幽灵控制器,但它实际上是一个位于选项卡栏控制器中的控制器。
实现这一目标的最佳方法是什么?仅供参考,我不想要模式对话框,标签栏必须始终在下方可见。
让我举个例子,我想做什么:我有一个有 4 个 TabBarItems 的选项卡,所以它包含 4 个控制器。并且有一个控制器不能显示在标签栏的图标中,但是当触摸这 4 个控制器之一内的按钮时,它会显示。因此,当它显示时,选项卡栏不能有任何选定的选项卡,必须取消选择每个项目。它必须像一个不在选项卡图标中显示的幽灵控制器,但它实际上是一个位于选项卡栏控制器中的控制器。
实现这一目标的最佳方法是什么?仅供参考,我不想要模式对话框,标签栏必须始终在下方可见。
可能有帮助的一件事是知道选项卡之间的转换何时发生。如果您在转换发生时立即显示您的幻影视图,您可能有足够的控制权来做您想做的事情。
我是这样做的:首先,将 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
}
}
(注意:可能有更清洁的方法来实现这一点,但它对我来说一直很好......)