IOS故事板:为给定位置加载多个子视图

我有三个不同的子视图都直接在故事板中定义,因此他们也有出口。 所有这些子视图都意味着在不同的时间在屏幕上占据相同的坐标,只有一个在任何时间占据空间,因此看起来某些外观正在发生变化。 我该怎么做呢? 假设我还有一个枚举,用于定义我当前所处的状态,从而显示该位置的子视图。

两个基本选项:

  1. 只需继续将三个子视图添加到场景中。 如果你这样做,有一些技巧会让你的生活更容易在IB中:

    • 对于每个视图,转到最右侧面板中的“身份检查器”选项卡(第三个),展开“文档”部分,并为三个视图中的每个视图提供唯一的“标签”(不要与UILabel混淆)控件;这只是IB将在内部用于引用您的视图的标签或描述)。 这样,当您浏览“文档大纲”(中心面板左侧显示的所有场景列表)中列出的控件树时,您将能够找出哪个是哪个。 当您使用这些重叠的视图时,强有力地掌握这个“文档大纲”将使您的生活更轻松。

    • 当您在场景中拥有三个视图时,您可能会发现最简单的方法是将您想要处理的视图拖到三个视图列表的末尾(但与其对等级相同)文件大纲“。 然后,您可以编辑该子视图。 当您对IB进行IB工作时,对三个子视图重复该过程。

    • 如果需要,您可以为三个子视图制作出口集合。 当您想对所有子视图执行某些操作时,这会更容易。 在处理只有三个时,可能不是很有用,但如果你有更多的子视图,那么这些集合可能很有用。

    • 您可以为三个视图中的每个视图定义唯一的UIView子类,这对于保持IBOutlet引用列表更加结构化非常有用。 此外,任何特定于视图的UI逻辑都可以隔离到单独的UIView子视图中。

    • 如果您使用这种技术,如果您计划动画这三个子视图之间的过渡动​​画,那么不仅仅将这三个子视图放在相关场景的顶级视图上实际上非常有用。 在场景上定义三个子视图的维度,然后将三个子视图放在这个新的临时子视图中是非常有用的。 这样,当您为更改设置动画时,可以将动画约束到屏幕的该部分。 这个新的临时UIView通常被称为容器视图,但不应与您在IB中看到的iOS 6容器视图混淆,后者与下面定义的下一个技术有关。

  2. 虽然所有这些技巧都可以使单个场景中的三组重叠视图的操作和管理变得更加容易,但实际上我认为自定义容器视图控制器是最好的方法。 父场景/视图控制器的一个场景,以及三个不同子视图中的每一个的单独视图控制器和IB场景。 它预先需要一些额外的代码(不是很难,但是第一次这样做时会有点异形),但是你的代码和IB场景很好地隔离了。 在建筑方面,这是最优雅的方法,恕我直言。 如果你想这样做,你应该参考:

    • UIViewController Containment上的WWDC 2011#102(需要Apple开发人员ID)

    • View Controller编程指南的包含部分

    • UIViewController参考文档的包含部分