2011-03-09 51 views
0

假设我已经测试了根级别的导航控制器。如何将根控制器移动到另一个控制器中

- (void)applicationDidFinishLaunching:(UIApplication *)application 
{ 
    self.window.rootViewController = self.navController; //iOS4 
} 

现在我想将它移动到标签控制器(在一个更大的应用程序)内的一个选项卡。我觉得我应该可以做一个相当于上面:

self.rootViewController = self.navController; //pseudocode 

里面说

- (void)viewDidLoad 

只是删除的代码其实什么是正确的/优雅的方式来进行此事?通常书籍是指控制器的根控制器,我想知道如何访问它,因为我可以在窗口中找到它。 (当然,我的理解可能是错误的)。

回答

1

修订的答案:

你的确可以在其他地方的UI根据需要插入您的主要UIViewController的视图。

诀窍是尽早做到这一点,和/或以正确的方式。 viewDidLoad不是正确的位置 - 在调用该方法时,通常需要使用主UIViewController实现。

有两个非常好的地方做这种UI的设置:

1)通过接口生成器(笔尖文件)通过在UIViewController实施loadView

2)(务必阅读Apple docs - - 非常好的信息)。

这是这样或那样,不要试图同时做一个UIViewController!

因此,在您的示例中,您可以使用界面构建器来编辑包含标签栏控制器的笔尖。拖入一个普通的UIViewController作为选项卡控制器的子项,然后将UIViewController的'Class'属性编辑为MySpecialViewController(即UIViewController的子类)。就是这样,你的笔尖现在会让你的视图控制器被添加到选项卡中的UI中。

要采取方法2),您需要在包含标签栏控制器UI的UIViewController的loadView方法中设置UITabBarController的viewControllers属性。

(下面我原来的答复)

没有进入苹果电脑公司提供的视图控制器的根视图控制器(S)(如UINavigationController的等)一贯的命名方式。但文档给你提供有关如何访问它们的信息;例如UINavigationController有一个名为viewControllers的属性,您可以访问它。

无缝地翻出现有视图控制器并将它们插入UI中的不同位置并不是一个好主意。如果你顺其自然地走下去(例如设备方位改变),你可能会带来各种各样的悲伤。这不是Apple想让你采取的那种方法。

一个更好的方法是在不同的地方有不同的视图控制器的几个不同的实例。如果他们需要访问相同的数据,他们共享相同的数据源。但他们是个别的,不同的实例。

+0

我实际上并没有拿出一个控制器,而是随机地将它放在别的地方。我在一个干净的项目中测试应用程序的一小部分作为一个窗口。在我的情况下,功能与其中一个选项卡中的功能相同。为了更好地理解风险投资公司的工作方式,我这样做了。让它在单一视图中工作,我觉得它应该很容易让它作为一个选项卡工作。 – Gazzer 2011-03-09 17:25:05

+0

啊,我明白你的意思,对不起,我在那里得到了错误的结局。我会更新我的答案。 – occulus 2011-03-10 10:04:59

相关问题