在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)