通用表视图控制器

嘿伙计! 今天我们将讨论通用的东西,看看上面的图片。 你看到了什么? 提供一些屏幕的简单iOS应用程序导航流程。 他们有什么共同点? 乍一看,我们可以观察到基于TableViewController构建的四个屏幕,对吗? 你同意吗? 可能最直观的方法是构建五个视图控制器来完成此应用程序,但我想分享一种方法,我们将仅使用两个方法。 一个用于所有列表屏幕中使用的通用表视图控制器,另一个用于显示未找到的屏幕,第二个视图控制器的构建只是为了证明您可以将另一种视图控制器与我们将要展示的概念集成在一起的概念。这里。 在本文的最后获得GitHub上的完整代码。

有什么变化?

如果您看一看,确实会注意到这些表格视图屏幕中的单元格正在发生变化。 因此,我们可以将表视图作为通用组件重用,并自定义所需的任何单元格。


为了使用故事板实现此目标,我认为这很困难,我不会说不可能,但是我花了很多时间,而且我也找不到一个优雅的解决方案,这主要是因为我们必须告知通用类型,并告知通用视图控制器和方法情节提要实例化不利于此。 因此这是一个复杂的主题,当然也有优点和缺点,如果您想了解更多信息,我在下面的链接中写了一篇关于该主题的文章:

什么? 以编程方式进行布局? 你疯了吗? 我为什么要这样做?

当我第一次听它时,我承认这听起来很奇怪。 一个聪明的同事向我和我建议了…

medium.com

因此,为了实现此目标,我使用了程序化的视图控制器,请看以下内容:

上面的代码具有执行表视图控制器表示所需的全部内容,并且具有(cellForAt)方法,numberOfRowsInSection和didSelectRowAt方法已实现。 注意构造函数推断出的通用类型,该通用类型有一个约束,并且它必须符合协议DescriptiveProtocol才能为(cellForAt)方法中的每个项目提供绑定UITableViewCell的方法。 因此,以这种方式,数据源中的每个元素都必须告知必须通过表视图中的可重用出队方法返回哪种单元格类型。 这是窍门,通用表视图对单元格一无所知,因此可以将其用于所有单元格。

描述符对象负责保存单元格类型,重用标识符和配置单元格必须调用的闭包。

如您所见,此结构符合DescriptiveProtocol,并且具有称为描述符的属性,如上所述,它有责任将其绑定到UIViewTableCell专业化,这时将在调用表视图cellForAt方法时通知单元格类型。

其余代码是不言自明的,我认为这不是灵丹妙药,但是可以在某些特定情况下帮助某人,如果您有话要说,请随时发表评论。 再见,下次见。

heuristisk / hkImperatorMensa

hkImperatorMensa –通用表视图控制器

github.com