iPhone:TabBarController作为导航控制器的第二级

时间:2010-05-13 20:50:42

标签: iphone uinavigationcontroller uitabbarcontroller

我是iphone开发的新手。

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

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

现在我希望其中一个加载的视图/控制器成为标签栏控制器。我怎么能这样做?

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

希望有道理。谢谢。

2 个答案:

答案 0 :(得分:3)

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

  

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

来自:Apple View Controller Programming Guide

的报价

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

此致 保罗

答案 1 :(得分:0)

您有两种选择。

首先。创建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

帮助您捕捉事件的方法。