一个没有Storyboard的UIViewController和UIViews(swift 3)

在Xcode中,情节提要可以轻松构建ViewController,Views,Button,Label等,而无需编写太多代码。 我们可以使用IBOutlets和IBAction将这些视觉元素连接到我们的代码。 虽然这样做有助于简化构建应用程序的过程,但它也有其缺点。

对于初学者来说,使用Storyboard可以抽象出代码中每个对象的状况。 了解TableView或ViewController作为对象的工作方式非常重要。

使用版本控制(例如git)时,情节提要板也会引起一些重大问题。 如果多个合作者对情节提要进行了更改,那么您将要处理XML文件中的冲突,这是一个很大的痛苦。

最后,如果您有大型应用程序,则根据您对视图和约束的管理方式,故事板上的内容可能会变得非常混乱。 查看具有20个视图且每个视图都具有自定义约束的视图控制器通常不是一个不错的站点。

在本文中,我将介绍如何在不使用情节提要的情况下使用初始UIViewController,一些UIView和UICollectionView来启动和运行应用程序。

配置

创建项目时,Xcode为我们提供了一个默认的情节提要文件,并附加了一个视图控制器。 我们需要做的第一件事是告诉Xcode我们不想使用情节提要。 为此,我们可以删除main.storyboard文件,然后选择项目,并在部署信息中删除“ main”,以便“ main interface”为空白。

您应该注意,main既是初始情节提要板文件的名称,也是“ main interface”选择的名称。 通过从“主界面”中删除“ main”,我们告诉项目不要将该文件作为初始ViewController。

如果我们现在尝试运行我们的项目,则由于应用程序没有初始视图控制器,它将崩溃—我们在didFinishLaunchWithOptions函数的AppDelegate中修复了该问题。

在这里,我们使用自定义类ViewController和window属性(这两个属性在项目中默认提供给我们)来创建初始视图控制器。 您还可以使用您自己的自定义类(即UIViewController的子类)来设置初始视图控制器。

用代码构建应用

让我们从简单开始,并将视图作为标题添加到视图控制器的顶部。

首先,我们创建一个UIView类型的变量,并在viewDidLoad中对其进行初始化。 从那里,我们可以将其添加到ViewControllers的视图中(所有视图控制器都带有一个名为view的view属性,该属性填充了视图控制器)。 现在,我们可以添加约束以将其放置在ViewController的视图顶部,并更改背景色,以便在运行应用程序时可以看到它的位置。

注意: 初始化视图时,可以使用带有CGRect的初始化程序。 使用此初始化程序将在您指定x,y,宽度和高度的任何位置放置和调整视图的大小。 我更喜欢使用约束,因为它支持多种屏幕尺寸。

现在我们已经设置了标题视图,可以在其中添加标签了。 让我们按照相同的过程创建标签。

由于我们正在使用标签,因此可以使用其他一些属性,例如文本大小和对齐方式。 在情节提要中,您可以使用属性编辑器来调整这些值,但我们也可以在代码中对其进行调整。

请注意,我们将标签添加为headerView的子视图,并且还将其限制为headerView而不是视图。 将视图添加到其他视图时,重要的是考虑视图层次结构以及应将其约束到什么。 以后添加的视图将与之前添加的所有视图重叠。

最后,让我们添加一个收藏夹视图。 在集合视图中,我们将使其显示为0到99。由于集合视图是更为复杂的视图类型,我们需要以不同的方式对其进行初始化,提供数据源和委托,并为其提供内容以填充细胞。

我将首先清理viewDidLoad并添加集合视图,就像添加其他视图一样。

像这样运行应用程序会导致崩溃。 集合视图在初始化时需要更多信息。

该错误告诉我们必须使用非nil布局参数初始化集合视图。 查看可用的初始化程序,我们可以使用CGRect和UICollectionViewLayout对其进行初始化。

现在,我们可以设置数据源,委托和自定义单元格,以用信息填充集合视图。 为此,我将创建几个新的swift文件和类,以防止ViewController类变得太大。 您可以查看此github以查看完整的项目。

设置好这些类后,我们需要将它们链接到集合视图。 在情节提要中,您可以在检查面板中执行此操作,但在代码中将如下所示:(最后3行)

NumbersCollectionViewDelegateAndDataSource类包含所有信息和必需的方法,这些信息和必需的方法将成为NumbersCollectionView的委托和数据源。 然后,我们用与在委托和数据源类中调用的useuseIdentifier相匹配的reuseIdentifier注册该单元。

处理集合的工作不仅仅是添加标签或视图,而且还涉及更多内容,但是概念仍然存在。 您需要初始化,添加到视图,设置所需的属性,以及将视图以编程方式放置在所有需要的位置。

感谢您阅读🙂

这再次是github仓库