为每个视图创建单独的视图控制器 iOS?

Creating individual View Controllers for each view iOS?

这是一个非常简单的问题,我相信答案是“是的,这是最佳做法”,但我只是想问这个问题。

在 Xcode 的情节提要中创建新视图时,创建单独的自定义视图控制器文件来专门处理每个视图是否是个好主意?

意思是,如果我创建一个名为“登录测验”的新视图,我是否应该创建一个“loginQuizViewController”来处理我为该视图编写的所有代码?

一个视图控制器可以而且很可能会包含除它拥有的根视图之外的多个视图。这意味着通常一个视图控制器拥有一个或多个视图,这些视图是它自己的根视图的子视图。这些视图通常也由同一个视图控制器控制。

从情节提要中看到的大多数项目实际上是视图控制器的表示(其他是占位符)。 "Login Quiz" 在概念上听起来像 screen,因此(不知道您的详细信息)创建 LoginQuizViewController 可能有意义。

简答:

是的,每个情节提要场景通常都有一个与之关联的唯一视图控制器 class。一个视图控制器有一个根view,它下面可能有许多子视图,每个子视图可能有更多的子视图。这个视图集合统称为“视图层次结构”。


长答案:

是的,每个 storyboard “scene” 都有一个与之关联的视图控制器。通常这个视图控制器 class 是一个特定的 UIViewController subclass,它对于特定的 Interface Builder 场景是唯一的。但是你不一定要有一个视图控制器 subclass 并且可能,例如,使用现有的 classes 之一(例如,这对于导航控制器场景或选项卡栏控制器场景并不少见).

但是,如果您有 任何 与特定情节提要场景关联的自定义逻辑,那么,是的,您通常会有一个针对该特定场景的唯一视图控制器子 class场景。

两个小的澄清:

  • 您指的是“测验视图”。

    这对于口语来说很好,但为了清楚起见,当我们讨论这个测验的所有内容时,它实际上是一个复杂的视图层次结构,而不仅仅是一个视图。

    一个“测验”场景将与一个唯一的视图控制器class相关联,并且该视图控制器的实例class将有一个“根视图”(用view 属性),但是 view 将有一大堆子视图(例如图像视图、按钮、标签等),其中一些可能有自己的子视图。

    所以一个情节提要场景有自己独特的视图控制器class,但与整个视图层次结构相关联。

  • 我们通常认为场景及其关联的视图控制器代表您在任何给定时间点可能看到的所有内容,但它并不总是一对一的关系。有时你看到的是由几个故事板场景和它们各自的视图控制器组成的。

    例如,如果您使用导航控制器,则导航控制器负责顶部的导航栏,而您的视图控制器可能负责导航栏下的所有内容。屏幕上可见的内容是由这两个视图控制器组成的。

    或者,在更极端的例子中,我们可以定义我们自己的view controller containers。在下面的示例中,当我们呈现 A 时,我们可以定义屏幕的下半部分由一个完全独立的场景 B 管理,它有自己的视图控制器:

    在这种情况下,A和B都有自己的IB场景和各自的视图控制器。通过向 A 场景添加“容器视图”(上面屏幕截图中的浅蓝色UIView)来实现这一点。

    但要点是,您在屏幕上看到的内容可能由单个故事板场景和视图控制器捕获,也可能由多个故事板场景和视图控制器组成。