我有3个不同的子视图,都直接在情节提要中定义,因此它们也有出口。所有这些子视图都打算在不同时间在屏幕上占据相同的坐标,而在任何时候都只有一个占据空间,因此看起来某些外观正在发生变化。我该怎么做呢?假设我还有一个枚举,它定义了我当前所处的状态,从而定义了该位置的子视图。

最佳答案

两个基本选项:

  • 继续,并将三个子视图添加到场景中。如果执行此操作,那么有一些技巧可以使您在IB中的生活更加轻松:
  • 对于每个视图,请转到最右侧面板中的“身份检查器”选项卡(第三个),展开“文档”部分,并为三个视图中的每个视图赋予唯一的“标签”(不要与UILabel控件;这只是IB在内部用于引用您的视图的标签或描述。这样,当您浏览“文档概述”中列出的控件树(所有场景的列表显示在中间面板的左侧)时,您将能够确定哪个是哪个。当您使用这些重叠的视图时,对“文档大纲”的强烈要求将使您的生活更加轻松。
  • 当您在场景中拥有三个视图时,您可能会发现,最容易将要处理的视图拖到三个视图列表的末尾(但与其他视图处于同一级别) “文档大纲”。然后,您可以编辑该子视图。当您对它们进行IB工作时,请对三个子视图重复该过程。
  • 如果需要,可以为三个子视图创建一个插座集合。当您要对所有子视图执行某些操作时,这使操作变得更容易。当只处理三个视图时,也许没有什么大用处,但是如果您有更多的子视图,则集合可能会有用。
  • 您可以为三个视图中的每个视图定义唯一的UIView子类,这对于使IBOutlet引用列表更加结构化很有用。同样,任何特定于视图的UI逻辑都可以隔离到各个UIView子视图中。
  • 如果您使用此技术,并且计划对这三个子视图之间的过渡进行动画处理,那么不仅将这三个子视图放在相关场景的顶级视图上,实际上非常有用。在场景中定义三个子视图的尺寸的视图,然后将三个子视图放入此新的临时子视图中,这非常有用。这样,在对更改进行动画处理时,可以将动画限制在屏幕的那一部分。这种新的临时UIView通常被称为容器视图,但不应与您将在IB中看到的iOS 6容器视图相混淆,后者与下面定义的下一种技术有关。
  • 尽管所有这些技巧都可以使在单个场景中对三组重叠视图的操作和管理更加容易,但是我实际上认为自定义容器视图控制器是最好的方法。父场景/视图控制器的一个场景,以及三个不同子视图的每一个的单独的视图控制器和IB场景。它预先需要一些额外的代码(不难,但是第一次使用时会有点陌生),但是然后您的代码和IB场景就很好地隔离了。在架构上,这是最优雅的方法,恕我直言。如果要执行此操作,则应参考:

    UIViewController Containment上的
  • WWDC 2011#102(需要Apple开发人员ID)
  • 《 View Controller编程指南》中的containment section
  • UIViewController参考文档
  • containment section

    关于ios - iOS Storyboard:为给定位置加载多个 subview ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16048576/

    10-12 05:42