在UIViewController的视图内的iOS嵌套视图控制器视图?

在UIViewController的视图中有一个嵌套的视图控制器的视图通常是不好的编程习惯吗? 比如说,我想要有一些对用户触摸有反应的交互元素,但是只占用屏幕的25%。

我想我会添加这个嵌套的视图控制器到我的UIViewController说:

[self.view addSubview: nestedViewController.view]; 

不,这通常是很好的devise,它有助于保持您的视图控制器简洁。 但是,您应该使用视图控制器遏制模式,看看下面的文档。

实现一个容器视图控制器

使用界面生成器与故事板进行设置也非常简单,请查看对象库中的容器视图。

这是故事板中的一个人为的例子。 在这个例子中,你将有4个视图控制器,一个容纳3个容器,每个容器一个。 当您显示具有所有容器的最左侧控制器时,Storyboard将自动初始化并embedded其他3.您可以通过childViewControllers属性访问这些子视图控制器,或者有一个可以覆盖的方法prepareForSegue:sender:和capture即将被调用的segue的目标视图控制器。 如果需要的话,也可以将属性传递给子视图控制器。

在这里输入图像说明

我把这个代码放在父视图控制器中。 这对我很有效。

Obj C

 -(void)viewDidLoad{ [super viewDidLoad]; InnerViewController *innerViewController = [self.storyboard instantiateViewControllerWithIdentifier:INNER_VIEW_CONTROLLER]; [self addChildViewController:innerViewController]; [self.view addSubview:innerViewController.view]; [innerViewController didMoveToParentViewController:self]; } 

Swift

  let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self) 

另一种select是使用IB并放置容器视图。 UIViewController将自动显示(在这种情况下XCode 9): 在这里输入图像说明

这里是我的Swift 3基于Swift开发者的解决scheme在FB的答案

  let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"), self.addChildViewController(childViewController) self.view.addSubview(childViewController.view) childViewController.didMove(toParentViewController: self)