将带有NavigationController的ChildViewController添加到ContainerController中

时间:2014-05-15 18:51:36

标签: ios objective-c uinavigationcontroller

我正在为项目设计自定义UIViewContainerController。我在此容器中保留contentView来管理我的Childviewcontroller's次观看。当我单独添加childviewcontroller时,它可以正常工作。但是childviewcontrollers中的一些必须用“navigationcontroller”初始化。这就是我在实施方面遇到问题的地方。

我在“navigationcontroller”上使用通常的initWithRootViewController方法来初始化(初始化)我的“childvc”&那么我如何将其与导航栏一起添加到我的contentView

这是我用于“childvc”的代码而没有“navigationcontroller”&它工作正常。

// in my containerview controller's add childview method. 
ChildViewController1 *vc = [ChildViewController1 new];

[self addChildViewController:vc]; // self = container vc
vc.view.frame = self.contentView.bounds;
[self.contentView addSubview:vc.view]; // contentView is the space i've kept to add childvcs
[vc didMoveToParentViewController:self];

现在当我尝试使用“navigationcontroller”初始化的“childvc”时(因为有一个流向这个“childvc”),我得到了错误&我需要知道的是如何将其添加到我的contentView以及导航栏。 (就像在tabbarcontroller中一样)。

这是我用“nav controller”初始化“childvc”的代码:

ChildViewController1 *vc = [ChildViewController1 new];
UINavigationController *nav = [[UINavigationController alloc] initWithRootViewController:vc];

我用简单的项目“Here”创建了公共存储库。

我已阅读标签栏/导航控制器& amp;在Apple文档中创建自定义容器viewcontrollers但似乎缺少一些关键的东西。 链接是“Here”。

1 个答案:

答案 0 :(得分:1)

通过查看公共回购中的注释代码,您要做的是:

container VC
  +-- navigation VC
  |     +-- child VC
  +-- child VC

这是错误的,子VC只能在视图控制器层次结构中出现一次。您的层次结构应如下所示:

container VC
  +-- navigation VC
        +-- child VC

这里有一个粗略的草图,说明设置此代码的代码可能如何。请注意导航控制器(及其视图)如何完全替换ChildViewController1

// Setup the view controller hierarchy - place this inside
// your container VC's initializer
ChildViewController1* vc = [ChildViewController1 new];
// With this statement, vc becomes the child of the navigation controller
UINavigationController* nav = [[UINavigationController alloc] initWithRootViewController:vc];
[self.childViewControllers addObject:nav];
[nav didMoveToParentViewController:self];

// Setup the view hierarchy - place this inside your
// container VC's loadView override
nav.view.frame = self.contentView.bounds;
[self.contentView addSubview:nav.view];

正如评论中所提到的,我建议您将视图控制器层次结构的设置与视图层次结构的设置分开。

  • 视图控制器设置的典型位置是初始化期间。您可以通过UINavigationController初始化程序查看initWithRootViewController:如何执行此操作。
  • 视图层次结构设置的规范位置位于视图控制器的loadView覆盖中。