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

Sky*_*ler 85 uiviewcontroller viewcontroller ios

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

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

[self.view addSubview: nestedViewController.view];
Run Code Online (Sandbox Code Playgroud)

Chr*_*ner 141

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

实现容器视图控制器

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

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

在此输入图像描述

  • 你在故事板里怎么做"地狱"?!这是一个基本问题..我不知道答案:)叹气 - 回答我自己的问题.将**容器**添加到场景中.塑造它.然后在故事板的空白字段中创建一个UIViewController.然后右键单击 - 从该容器(在导航器列表或GUI中)拖动到新的UIViewController.从弹出窗口中,选择viewDidLoad-embed,开始使用.谢谢克里斯!:) (38认同)
  • @JoeBlow +1 "viewDidLoad-embed" 天哪:谁能猜到! (2认同)

Mac*_*wia 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];
}
Run Code Online (Sandbox Code Playgroud)

斯威夫特:

 let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildViewController"),
 self.addChildViewController(childViewController)
 self.view.addSubview(childViewController.view)
 childViewController.didMove(toParentViewController: self)
Run Code Online (Sandbox Code Playgroud)

另一种选择是使用IB并放置容器视图.UIViewController将自动显示(在本例中为XCode 9): 在此输入图像描述

  • 是! +1.感谢您以编程方式包含如何执行此操作的答案:) (2认同)

Raj*_*ain 5

这是我的Swift 3解决方案基于Swift Developers On FB的答案

 let childViewController = UIStoryboard(name: "Main", bundle: nil).instantiateViewController(withIdentifier: "ChildPageViewController"),
 self.addChildViewController(childViewController)
 self.view.addSubview(childViewController.view)
 childViewController.didMove(toParentViewController: self)
Run Code Online (Sandbox Code Playgroud)