【问题标题】:iPhone: TabBarController as second level of Navigation ControlleriPhone:TabBarController 作为第二级导航控制器
【发布时间】:2010-05-13 20:50:42
【问题描述】:

我是 iphone 开发新手。

我已经阅读了有关在窗口上实现标签栏控制器的教程(例如,作为应用程序的主控制器)。但是如何将标签栏控制器创建为可以由导航栏控制器调用的“独立” UIViewController?

基本上,我的导航栏控制器有一个 UIViewControllers 数组,它显示在表格中,然后在用户选择项目时加载适当的视图/控制器。

现在我希望这些加载的视图/控制器之一成为标签栏控制器。我该怎么做?

我不确定如何在应用程序委托中没有插座/实例的情况下自行创建标签栏控制器。

希望这是有道理的。谢谢。

【问题讨论】:

  • 似乎记得这在 UI 指南中是不受欢迎的

标签: iphone uinavigationcontroller uitabbarcontroller


【解决方案1】:

虽然之前的回答是正确的,但我想指出,Apple 不会对此感到满意:

您永远不想将标签栏控制器推送到导航控制器的导航堆栈上。这样做会产生一种不寻常的情况,即标签栏仅在特定视图控制器位于导航堆栈顶部时出现。标签栏被设计为持久性,因此这种短暂的方法可能会让用户感到困惑。

引用自:Apple View Controller Programming Guide

阅读人机界面指南,您的应用可能会因“违反界面规则”而被拒绝。更重要的是,您还必须手动处理所有 vieWillAppear/Disappear 等。我很确定还有另一种设计界面的方法。

问候, 保罗

【讨论】:

    【解决方案2】:

    你有两个选择。

    首先。创建 UITabBarController(一般 alloc-init 的东西)并将其推送到 UINavigationController。

    第二。您可以创建自定义 UIViewController 并将 UITabBar 放在那里。之后,您可以对其进行自定义并将该自定义 UIViewController 推送到导航控制器。代码将如下所示:

    UITabBar *tabBar = [[UITabBar alloc] initWithFrame:
        CGRectMake(0, self.view.frame.size.height - 49, 320, 49)];
    tabBar.autoresizingMask = 
        UIViewAutoresizingFlexibleTopMargin | 
        UIViewAutoresizingFlexibleWidth;
    [self.view addSubview:tabBar];
    

    例如,您可以在 UIViewController 的 viewDidLoad 方法中使用类似的代码。 要处理选项卡更改事件,您必须实现 UITabBarDelegate 协议并将其分配(例如给 UIViewController 本身):

    tabBar.delegate = self;
    

    之后你必须实施

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

    帮助您捕捉事件的方法。

    【讨论】:

    • 谢谢。所以没有办法像在 IB 中那样使用 tabbarcontroller 吗?我想要 tabbarcontroller 的所有功能,但我希望能够在我自己的视图中而不是在窗口中显示它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多