Iphone uitabar在触摸屏上重新加载UIView

Iphone uitabar在触摸屏上重新加载UIView,iphone,objective-c,cocoa-touch,Iphone,Objective C,Cocoa Touch,当触摸选项卡栏图标时,即使它已经是选定的图标,也可以调用方法吗?如果子视图正在显示,我想让它在触摸时删除子视图 我确信一定有办法做到这一点,因为我在其他应用程序中看到了它,但我找不到关于它的任何文档。来自: -(void)选项卡栏:(UITabBar*)选项卡栏didSelectItem:(UITabBarItem*)项 当用户选择选项卡栏项目时发送给代理。(必选) 正如您所注意到的,我认为,正如Apple docs所述,只有在选择选项卡时才会发送此消息 一个重要的注意事项是,点击所选选项卡

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

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

来自:

-(void)选项卡栏:(UITabBar*)选项卡栏didSelectItem:(UITabBarItem*)项

当用户选择选项卡栏项目时发送给代理。(必选)

  • 正如您所注意到的,我认为,正如Apple docs所述,只有在选择选项卡时才会发送此消息

  • 一个重要的注意事项是,点击所选选项卡栏按钮已经存在(未记录?)默认
    UIKit
    行为:

    如果选项卡包含
    UINavigationViewController
    ,它将向其发送
    poptrootviewcontrolleranimated:
    消息。您可以在任何iOS应用程序上检查此项

因此,在覆盖此默认(以及用户期望的)行为之前要小心,这通常是个坏主意。 苹果可能故意在其
UIKit
API中隐藏了你想要做的事情

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

  • 小但不易破解:显示选项卡栏后,递归浏览其
    子视图
    树,以查找(我希望得到确认)
    UIButton
    s继承类(=private
    UITabBarButtons
    或类似内容),在触碰事件中添加目标/选择器对(您可能必须首先删除默认行为,这可能很棘手)
  • 最糟糕的解决方案,但可能是唯一的解决方案:不要使用
    uitabar
    ,而是一个自定义类。我很确定有现成的开源组件可以模仿
    uitabar
    ,但很抱歉,我从未使用/搜索过
来自:

-(void)选项卡栏:(UITabBar*)选项卡栏didSelectItem:(UITabBarItem*)项

当用户选择选项卡栏项目时发送给代理。(必需)

  • 正如您所注意到的,我认为,正如Apple docs所述,只有在选择选项卡时才会发送此消息

  • 一个重要的注意事项是,点击所选选项卡栏按钮已经存在(未记录?)默认
    UIKit
    行为:

    如果选项卡包含
    UINavigationViewController
    ,它将向其发送一条
    poptrootviewcontrolleranimated:
    消息。您可以在任何iOS应用程序上检查该消息

因此,在覆盖此默认(以及用户期望的)行为之前要小心,这通常是个坏主意。 苹果可能故意在其
UIKit
API中隐藏了你想要做的事情

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

  • 小但不易破解:显示选项卡栏后,递归浏览其
    子视图
    树,以查找(我希望得到确认)
    UIButton
    s继承类(=private
    UITabBarButtons
    或类似内容),在触碰事件中添加目标/选择器对(您可能必须首先删除默认行为,这可能很棘手)
  • 最糟糕的解决方案,但可能是唯一的解决方案:不要使用
    uitabar
    ,而是一个自定义类。我很确定有现成的开源组件可以模仿
    uitabar
    ,但很抱歉,我从未使用/搜索过

您可以让UITabbarcontroller的代表

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

另外,请阅读此文档:

您可以让UITabbarcontroller的代表

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

另外,请仔细阅读此文档:

然后我要问第二个问题,如果您不介意的话,是否可以在顶部没有栏的情况下使用UINavigationController的功能?我想您可以通过玩一些东西(脏的)来实现如<代码> .Orth.y>=44代码/>代码> .gig.Higth+=44 或可能只是隐藏<代码>导航栏脏。您应该考虑添加一个刷新按钮,对用户更明确,而不是使用“技巧”来刷新视图,这是从UX的观点来看是不好的。(用户永远不会知道如何刷新视图!)我的应用程序对屏幕不动产的要求很高。你可能是对的,我会尝试你的建议,但我可能无论如何都要改变。谢谢你。除了年轻的极客,像推特拉刷新这样的“棘手”用户界面(顺便说一句,这可能是你的解决方案)这是一个糟糕的想法。如果你不介意的话,这就引出了第二个问题。是否可以在顶部没有栏的情况下使用UINavigationController的功能如<代码> .Orth.y>=44代码/>代码> .gig.Higth+=44 或可能只是隐藏<代码>导航栏脏。您应该考虑添加一个刷新按钮,对用户更明确,而不是使用“技巧”来刷新视图,这是从UX的观点来看是不好的。(用户永远不会知道如何刷新视图!)我的应用程序对屏幕不动产的要求很高。你可能是对的,我会尝试你的建议,但无论如何我都可能要改变。谢谢你。除了年轻的极客,像推特拉刷新这样的“棘手”用户界面(顺便说一句,可能是你的解决方案)是个坏主意