是否可以在触摸选项卡栏图标时调用方法,即使它已经是选定的图标?如果子视图正在显示,我想让它在触摸时删除子视图。
我确信一定有办法做到这一点,因为我在其他应用程序中看到了它,但我找不到任何文档。
来自UITabBarDelegate:的苹果文档
- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item
当用户选择选项卡栏项目时发送给代理。(必需)
-
正如你所注意到的,我认为,正如苹果文档所说,只有当选择选项卡时,才会发送此消息
-
重要的一点是,已经存在(未记录?)点击所选选项卡栏按钮的默认
UIKit
行为:如果选项卡包含
UINavigationViewController
,它将向其发送一条popToRootViewControllerAnimated:
消息。您可以在任何iOS应用程序上检查此项。
因此,在覆盖此默认(和用户期望的)行为之前要小心,通常是个坏主意苹果可能故意在其UIKit
API中隐藏了你想做的事情。
但如果你无论如何都想这样做,这里有一些想法:
-
小但不容易破解:一旦tabBar显示出来,递归浏览其
.subviews
树,找到(我希望,有待确认)UIButton
继承的类(=私有UITabBarButtons
或类似的),以在TouchUp事件上添加您的目标/选择器对(您可能必须先删除默认行为,这可能很棘手) -
最糟糕的解决方案,但可能是唯一的解决方案:不要使用
UITabBar
,而是使用自定义类。我很确定有现成的可以使用的、模仿UITabBar
的开源组件,但很抱歉,我从未使用过/搜索过
您可以委托UITabbarcontroller、
- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0);
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController;
此外,请浏览此文档:UITabBarController委托协议