【问题标题】:How to simulate the behavior of a UITabBarViewController?如何模拟 UITabBarViewController 的行为?
【发布时间】:2010-12-01 17:13:53
【问题描述】:

我想在不使用它的情况下复制这个控制器的相同功能,这是因为标签栏控制器根本无法自定义(固定大小、可切换状态标签等)。

我想要一个自定义的“标签栏”,其中包含我想要的任何视图。而且我还需要推动视图控制器,让这个自定义的标签栏固定在它的位置。

我见过很多这样做的应用程序,我想知道是否使用不同的 UIWindow 对象(一个用于自定义标签栏,另一个用于内容)是最好的方法。

对此有何建议或指导?

提前致谢。

【问题讨论】:

    标签: iphone ios4 uinavigationcontroller custom-controls uitabbarcontroller


    【解决方案1】:

    绝对不是 UIWindows - 在 iPhone 应用程序中应该只有一个 UIWindow。

    我会创建一个 UIViewController 子类,在顶部有一个新的导航栏 ui,在它下面有一个 UIView。此视图将用于包含您要推入其中的控制器的所有视图。该视图会将 clipsToBounds 设置为 YES,以确保您的其他控制器视图不会与导航栏等重叠。

    它还有一个数组来保存当前在其中的控制器列表。

    您的控制器将实现 pushViewController:animated: 方法等,以允许您将其他视图控制器添加到堆栈中 - 您可以将新控制器添加到您的数组中,并将其视图添加为控制器视图的子视图。

    然而,要做到这一点实际上需要做很多工作——导航控制器会在内存不足警告、处理旋转、动画开/关视图等时释放子控制器视图。您是否 100% 确定这是您的想做什么?

    【讨论】:

    • 好吧,我知道这很难实现,不过我喜欢你的解决方案。如果不是一个导航控制器,我只是在主控制器中放置一个内容视图,然后我可以随时将该内容视图切换到不同的视图控制器的视图,并在这些转换之间添加动画。
    • 这可以正常工作,但你必须自己做后退按钮 ui 的东西 :)
    【解决方案2】:

    我使用了一种非常简单的方法。我继承了 UITabbarController 并在初始化期间:

        //  Custom TabBar View
        //
        self.tabBar.hidden = YES;
        MyTabBarView *myTabBarView = [[MyTabBarView alloc] initWithFrame:CGRectMake(0, 1024-44, 768, 44) // it'a an iPad app
                                                           configuration:configuration]; // an array of dictionary representing the view controllers
        [self.view addSubview:myTabBarView];
        [bottomBarView release];
    

    然后我加载一些视图控制器:

    aViewController.hidesBottomBarWhenPushed = YES; 
    

    从我在 UITabBarViewController 上执行的 MyTabBarView 实例:

    setSelectedIndex:
    

    通过这种方式,我可以轻松定制全屏应用程序。

    【讨论】:

    • 好又简单的解决方案 marcio,但是如果我想在导航控制器中推送一些东西,你会如何留下一个静态的假标签栏视图?
    • 也许我不明白,但如果你的意思是视图层次结构和假条视图的可见性。好吧,我们刚刚将它添加到 tabBarViewController.view 并且它始终可见,因为它位于 selectedViewController 之上。通过这种方式,我可以在不显示标准标签栏的情况下获得 tabBarViewController(以及 uinavigation 等)的好处。
    猜你喜欢
    • 1970-01-01
    • 2015-12-09
    • 2012-07-28
    • 1970-01-01
    • 1970-01-01
    • 2018-12-06
    • 2011-04-09
    • 2019-08-31
    • 2020-05-21
    相关资源
    最近更新 更多