在UIViewController的视图中包含嵌套视图控制器的视图,通常在iOS中是不好的编程习惯吗?举例来说,我想使用某种交互式元素来响应用户的触摸,但只占用屏幕的25%。
我想我可以这样说,将这个嵌套的视图控制器添加到我的UIViewController中:
[self.view addSubview: nestedViewController.view];
Answers:
不,这通常是很好的设计,它有助于保持视图控制器的简洁。但是,您应该使用视图控制器包含模式,请查看以下文档。
使用Interface Builder和Storyboards进行设置也非常简单,请查看对象库中的Container View。
这是一个情节提要中的人为例子。在此示例中,您将有4个视图控制器,其中一个可容纳3个容器,每个容器一个。当您显示具有所有容器的最左侧控制器时,情节提要将自动初始化并嵌入其他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)