UIViewController视图中的iOS嵌套视图控制器视图?

时间:2013-07-06 03:28:01

标签: ios uiviewcontroller viewcontroller

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

我想我会把这个嵌套的视图控制器添加到我的UIViewController中,例如:

[self.view addSubview: nestedViewController.view];

3 个答案:

答案 0 :(得分:137)

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

Implementing a Container View Controller

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

这是故事板中的一个人为设想的例子。在这个例子中,你将有4个视图控制器,一个容纳3个容器,每个容器一个。当您呈现包含所有容器的最左侧控制器时,Storyboard将自动初始化并嵌入另一个3.您可以通过childViewControllers属性访问这些子视图控制器,或者有一种方法可以覆盖{{ 1}}并捕获即将被调用的segue的目标视图控制器。如果需要,还可以将属性传递给子视图控制器。

enter image description here

答案 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)

另一种选择是使用IB并放置容器视图。 UIViewController将自动显示(在本例中为XCode 9): enter image description here

答案 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)