我正在为项目设计自定义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”。
答案 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
覆盖中。