演示控件,自定义视图和更轻巧的UIViewControllers(第2部分)

现在我们有了MVVM,MVP,VIPER,VIP,但是其他部分呢? 复杂的UI逻辑应该放在哪里?

在上一篇文章中,我介绍了一种拆分UIViewController的方法,以使UITableViews和UICollectionViews由我称为TableViewDriver或CollectionViewDriver的新组件驱动。 这次,我将进一步从您的项目的显示方式中抽象出UIViewController,因此从视图控制器中,您将无法确定是使用UITableView,UICollectionView还是UIStackView来显示项目。随你。 在这篇文章中,我将向您介绍一种非常强大的技术: 演示控件。

Presentation Controls假定您通过使用情节提要板或xibs使用“界面构建器”,因为它们是以这种方式创建的。

问题

使用表视图驱动程序,您的代码将变得更加整洁,但是视图控制器仍然具有许多IBOutlet成员,这使得驱动程序有点像根本问题的解决方法。

根本问题是UIViewController是表示逻辑的核心。 它非常了解其成员以及他们如何显示数据。 如果不修改视图控制器的代码,就无法修改数据的显示方式。

演示控件

表示控件是一个对象,负责处理视图控制器表示逻辑的一小部分。 它可以具有IBOutlet,并且可以作为IBOutlet包含在视图控制器中。

它们非常强大,可以从低级表示逻辑中抽象视图控制器,使其成为其管理的表示控件的协调器。

计划

使用表示控件将简化视图控制器,该控件将负责处理表示细节,并将通过IBOutlet包含在视图控制器中。

解决方案

界面生成器是该技术的重要组成部分。 如果您没有注意到这一点,则可以使用Interface Builder将对象添加到视图控制器。

该对象小部件将代表我们解决方案中的Presentation Control。

因此,要使用Presentation Controls,您要做的第一件事就是使用Interface builder将新的Object添加到视图控制器中:

该对象将是NSObject的子类。 因此,这里我们必须创建一个新的NSObject子类,将其称为{Whatever} PresentationControl,并将其分配给最近添加的对象。

请注意,现在我们已将对象分配给场景,当您使用界面生成器自动查找对应对象时,将显示一个新选项:

现在我们已经在场景中有了演示文稿控件,我们可以将IBOutlet连接到它了,就像我们用来将IBOutlet连接到UIViewController子类一样:

最后,可以通过IBOutlet将此Presentation Control连接到视图控制器:

结论

一旦有了表示控件来处理视图的一部分,视图控制器就将无法确定数据的实际显示方式,这很棒。

但是,强大的力量伴随着巨大的责任。 这不是灵丹妙药,您必须在选择所有替代方案之前对其进行评估。 例如,您可以使用子视图控制器或自定义视图拆分UIViewControllers。

我个人发现这非常方便且有用,它使我的视图控制器比以往任何时候都更薄。

如果您以其他方式执行此操作,我将很高兴听到它。 请在下方留下你的意见! 谢谢!