在滚动视图中重用视图控制器。 Swift iOS8开发

时间:2014-10-17 17:21:18

标签: ios xcode swift storyboard

在Xcode6中使用Swift for iOS8,我需要创建一个滚动视图,滚动浏览动态创建的卡片。这些卡片包含自己独特的图像,文本和按钮功能,但共享相同的布局。我无法理解如何在故事板中创建可重复使用的视图控制器,我可以从中构建每张卡,然后将它们全部嵌入到滚动视图容器中,以便我可以一次滑过它们。

通常情况下,我想询问有关Stack Overflow的更多具体问题,但经过数小时的研究后,我感到茫然;非常感谢您的帮助!

1 个答案:

答案 0 :(得分:11)

您正在寻找自定义容器视图控制器。

如果以编程方式执行此操作,则在父控制器上调用addChildViewController(从而将子视图控制器添加到视图控制器层次结构中),执行子视图的所有配置(包括将其添加到父控制器的查看层次结构)然后在最后,在孩子上调用didMoveToParentViewController

let child = storyboard!.instantiateViewController(withIdentifier: "storyboardIdForChildScene")
addChild(child)
child.view.frame = .zero
scrollView.addSubview(child.view)
child.didMove(toParent: self)

以编程方式删除时,您可以撤消此过程,在子项上调用willMoveToParentViewController:nil,从其超级视图中删除子视图,完成所有操作后,请调用removeFromParentViewController

child.willMove(toParent: nil)
child.view.removeFromSuperview()
child.removeFromParent()

如果在Interface Builder中执行此操作,则更容易,只需将“容器视图”从“对象库”拖到父视图控制器的场景中即可:

container view

有关如何执行此操作的详细信息,请参阅 View Controller编程指南中的Implementing a Custom Container View Controller有关为什么执行这些包含调用以保持视图的重要性的讨论控制器层次结构与视图层次结构同步,请参阅WWDC 2011视频Implementing UIViewController Containment


以上内容适用于Swift 4.对于早期的Swift版本,请参阅previous revision of this answer