UITabBar在触摸时重新加载UIView



是否可以在触摸选项卡栏图标时调用方法,即使它已经是选定的图标?如果子视图正在显示,我想让它在触摸时删除子视图。

我确信一定有办法做到这一点,因为我在其他应用程序中看到了它,但我找不到任何文档。

来自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委托协议

最新更新