0

我有一个非常基本的 iphone 应用程序,其中发生以下步骤。

  1. 加载的应用程序委托...
  2. 游戏根视图控制器(这只是 2 个按钮,“开始游戏”和“继续游戏”)
  3. 单击开始游戏按钮时,加载 RootViewController。
  4. 带有标签栏控制器的根视图控制器?

我真的不确定游戏如何在 iPhone 应用程序中做到这一点,但以上是我最好的猜测。

我希望标签栏控制器只出现在 RootViewController 中,但无论我做什么,我都不能让标签栏控制器出现在这个视图中。

但是,我可以使正常的标签栏出现。但这不是标签栏控制器,我需要控制每个标签的功能(导航控制器、表格控制器等)。

根据文档,使用标签栏控制器的众多方法之一是通过应用程序的主窗口。但它并没有说您是否可以在正常视图中使用它;或者确实如何。

我尝试了几次尝试使标签栏控制器看起来无济于事。

例如,如果我这样做,在我的 GameRootViewController 里面的按钮;

-(IBAction) btnPress {

    RootViewController *root = [[RootViewController alloc] initWithNibName:@"RootViewController" bundle:nil];

    [self.view addSubview:root.tabBarController.view];

    [root release];
}

什么都没有出现。

如果我尝试正常的做法:

[self.view addSubview:root.view];

视图出现了,但我从来没有看到标签栏控制器。

这让我很困惑。

我在想可能游戏/应用程序可以做到这一点:

  1. 应用代理
  2. 加载由...等制作的所有启动画面、演职员表
  3. 加载开始游戏,继续游戏屏幕并处理这些创建的动作
  4. 使应用程序委托窗口将标签栏控制器添加到 self.window。

但我不确定。我想澄清/了解我是否可以将标签栏控制器放在视图控制器中,或者它们只能在应用程序委托中使用?

4

1 回答 1

3

首先,不要将控制器与视图混淆。视图是 UI 的可见部分,控制器是幕后的不可见对象。您不要将控制器放在视图中或将控制器“放在”其他控制器中。相反,控制器存在于各种层次结构中,这些层次结构的结构决定了哪些视图出现在何时何地。

您以非标准方式使用标签栏(这可能会使用户感到困惑),但您需要将标签栏控制器放在导航控制器内,以便获得如下所示的层次结构:

navigationController (rootViewController)
    -->TabBarController(secondController)
        -->tabViewController1
        -->tabViewController2
        -->tabViewController3

因此,您的第一个可见视图是由 navigationController 的 rootController 控制的按钮视图。选择一个按钮后,它会将 TabViewController 推送到导航堆栈上,从而将选项卡栏带入视图,并选择默认选项卡。(请注意,您必须隐藏导航栏以使导航堆栈对用户不可见。)

于 2011-03-09T18:19:22.880 回答