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