繁体   English   中英

如何将标签栏控制器放在视图控制器而不是委托中?

[英]How to put tab bar controllers inside of view controllers and not the delegate?

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

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

我真的不确定游戏如何在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。

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

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM