让我举个例子说明我想做什么: 我有一个包含4个TabBarItems的选项卡,因此它包含4个控制器。并且有一个控制器不能显示在标签栏的图标中,但是当触摸其中一个控制器中的一个按钮时,它将显示出来。因此,当它显示时,标签栏必须没有任何选定的标签,必须取消选择每个项目。它必须像幽灵控制器一样,没有显示在标签图标中,但实际上它是标签栏控制器中的控制器。
实现这一目标的最佳方法是什么? Fyi,我不想要一个模态对话框,标签栏必须始终在下面显示。
答案 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
}
}
(注意:可能有更简洁的方法来实现这一点,但它对我来说一直很好......)