2011-06-14 73 views
0

是否可以在触摸标签栏图标时调用方法,即使它已经是所选图标?如果子视图显示,我想让它在触摸时删除子视图。UITabBar触摸重新加载UIView

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

回答

4

Apple Documentation for UITabBarDelegate

- (void)tabBar:(UITabBar *)tabBar didSelectItem:(UITabBarItem *)item

发送到委托当用户选择一个选项卡栏项。 (必填)

  • 正如你注意到我认为,和苹果的文档说,这条消息被发送只有当标签被选中

  • 一个重要的注意,已经有一个(未作记录?)默认轻敲选择标签栏按钮的UIKit行为:

    如果选项卡包含UINavigationViewController它会发送给它一个popToRootViewControllerAnimated:消息。你可以在任何iOS应用上查看。

覆盖此默认(和用户预期)的行为,这一点,一般,一个坏主意之前,所以要小心。 Apple可能隐藏了您想要在其UIKit API中执行的操作,旨在

但如果你想反正这样做,这里有一些想法:

  • 小,但不容易破解:一旦使用TabBar已经显示,递归地浏览其.subviews树找(我希望,待确认)UIButton小号继承类(=私人UITabBarButtons或类似的东西)来添加上触上事件目标/选择器对(你可能必须先删除默认的行为,这可能会非常棘手)
  • 最差SOLUT离子,但可能是唯一一个:不要使用UITabBar,而是一个自定义类。我很确定有一些模拟UITabBar的即用型开源组件,但很抱歉,我从未使用/搜索过一个。
+0

那么这使我想到第二个问题,如果你不介意的话,它是可能使用UINavigationController的功能与顶部的酒吧? – Weston 2011-06-14 11:40:58

+0

我想你可以通过欺骗一些*(脏)*像'.origin.y - = 44'和'.frame.heigth + = 44'或者只是隐藏'navigationBar'。肮脏....你真的应该考虑添加一个刷新按钮,更明确的用户,而不是使用“技巧”来刷新视图,这从UX的角度来看是不好的。 (用户将永远不会如何刷新视图!) – 2011-06-14 11:51:09

+0

我的应用程序是非常苛刻的屏幕房地产,你可能是正确的,但我会尝试你的建议,但我可能不得不改变。谢谢。 – Weston 2011-06-14 11:54:13

0

您可以为代表的UITabBarController,

- (BOOL)tabBarController:(UITabBarController *)tabBarController shouldSelectViewController:(UIViewController *)viewController __OSX_AVAILABLE_STARTING(__MAC_NA,__IPHONE_3_0); 
- (void)tabBarController:(UITabBarController *)tabBarController didSelectViewController:(UIViewController *)viewController; 

也请通过这个文件:UITabBarController delegate protocol