在 iOS 中,在 UIViewController 的视图中有一个嵌套的视图控制器的视图通常是不好的编程习惯吗?比如说我想要某种交互元素来响应用户的触摸,但只占据屏幕的 25%。
我想我会通过说这样的话将这个嵌套的视图控制器添加到我的 UIViewController 中:
[self.view addSubview: nestedViewController.view];
在 iOS 中,在 UIViewController 的视图中有一个嵌套的视图控制器的视图通常是不好的编程习惯吗?比如说我想要某种交互元素来响应用户的触摸,但只占据屏幕的 25%。
我想我会通过说这样的话将这个嵌套的视图控制器添加到我的 UIViewController 中:
[self.view addSubview: nestedViewController.view];
不,这通常是很好的设计,它有助于保持视图控制器简洁。但是,您应该使用视图控制器包含模式,请查看以下文档。
使用带有 Storyboard 的 Interface Builder 进行设置也非常简单,请查看对象库中的 Container View。
这是故事板中的一个人为示例。在此示例中,您将有 4 个视图控制器,一个包含 3 个容器,一个用于每个容器。当您呈现包含所有容器的最左侧控制器时,Storyboard 将自动初始化并嵌入其他 3 个。您可以通过childViewControllers
属性访问这些子视图控制器,或者有一种方法可以覆盖prepareForSegue:sender:
和捕获目标视图控制器即将被调用的segue。如果需要,这也是将属性传递给子视图控制器的好方法。
我把这段代码放在父视图控制器中。这对我很有效。
对象 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)
这是我基于 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)