93

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

我想我会通过说这样的话将这个嵌套的视图控制器添加到我的 UIViewController 中:

[self.view addSubview: nestedViewController.view];
4

3 回答 3

150

不,这通常是很好的设计,它有助于保持视图控制器简洁。但是,您应该使用视图控制器包含模式,请查看以下文档。

实现一个容器视图控制器

使用带有 Storyboard 的 Interface Builder 进行设置也非常简单,请查看对象库中的 Container View。

这是故事板中的一个人为示例。在此示例中,您将有 4 个视图控制器,一个包含 3 个容器,一个用于每个容器。当您呈现包含所有容器的最左侧控制器时,Storyboard 将自动初始化并嵌入其他 3 个。您可以通过childViewControllers属性访问这些子视图控制器,或者有一种方法可以覆盖prepareForSegue:sender:和捕获目标视图控制器即将被调用的segue。如果需要,这也是将属性传递给子视图控制器的好方法。

在此处输入图像描述

于 2013-07-06T03:35:47.583 回答
57

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

对象 C

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

斯威夫特

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

另一种选择是使用 IB 并放置容器视图。UIViewController 将自动显示(在本例中为 XCode 9): 在此处输入图像描述

于 2015-07-23T10:06:45.523 回答
5

这是我基于 Swift Developers On FB 的回答的 Swift 3 解决方案

 let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"),
 self.addChildViewController(childViewController)
 self.view.addSubview(childViewController.view)
 childViewController.didMove(toParentViewController: self)
于 2017-07-26T14:06:23.543 回答