FSQCellManifest 1.1.0

FSQCellManifest 1.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 自定义
发布最后发布2015年11月

Brian DorfmanSam Grossberg维护。



  • 作者
  • Brian Dorfman

A UITableView和UICollectionView的代理和数据源,提供用于描述您的部分和单元格的更简单的统一接口。

概览

FSQCellManifest提供了一种改进的接口,用于与UITableView和UICollectionView相比手动实现它们的代理和数据源方法。您可以在代码中的一个位置描述您的单元格结构,然后清单将负责向代理和数据源回调返回适当的值。它提供了广泛的配置选项和便利属性,以支持您可能拥有的任何类型的表格或集合视图。

清单提供的许多其他功能包括

  • 提供表格和集合视图的统一接口,使编写同时适用于这两种视图的通用代码变得更加容易。
  • 将高度和单元格重用/配置代码从视图控制器/数据源中移出至单元格类本身,使得单元格在不同屏幕中更容易重用。
  • 允许您使用块而不是代理回调来定义单元格行为。
  • 无需预注册单元格标识符。

在头文件中对清单类进行了彻底的文档编写,但此说明将简要介绍如何将FSQCellManifest用于自己的项目。

设置

手动安装

您还可以简单地将FSQCellManifest目录中的objc文件添加到项目中,方法是通过复制它们,或者使用git子模块。

FSQMessageForwarder

FSQCellManifest还需要FSQMessageForwarder才能工作。如果您正在使用Carthage或CocoaPods,这应该会自动为您处理。否则,您需要手动将此仓库添加到项目中(例如,通过git子模块或手动将文件复制到您的仓库)。

示例应用

本项目包含一个示例应用,它创建了一个简单的表格视图和一些虚数据。如果您想快速设置FSQCellManifest,可以查看它来了解如何轻松开始。

示例应用需要FSQMessageForwarder框架才能运行,而这个库中并未包含此框架。如果你已安装了Carthage,可以直接运行carthage bootstrap命令来在正确的位置设置框架。否则,你需要手动将转发框架添加到示例应用Xcode项目设置中指定的位置。

使用FSQCellManifest

要将FSQCellManifest与你的表格或集合视图一起使用,拥有视图的对象应该实例化和保留FSQTableViewCellManifest或FSQCollectionViewCellManifest新实例的一个,具体根据需要选择,并将此对象设置为视图的数据源和代理。然后你应使用接口的函数来描述并修改视图的内容,它将处理所有必要的调用和回调,以渲染你的单元格。

请注意,如果你使用的是除了UICollectionViewFlowLayout以外的集合视图布局,你可能需要子类化或添加FSQCollectionViewCellManifest的分类方法,使它知道如何响应任何自定义代理/数据源回调。

创建简单的声明

使用声明时,你将创建FSQSectionRecord对象,每个对象都描述你的视图中的一个部分。然后,每个这些对象将有一个FSQCellRecord对象的数组,它们分别描述了该部分中的一个单元格。

这些记录上都有许多配置选项,但两个主要的必需属性是单元格记录的cellClassmodel

cellClass是你想要为该行提取的UITableViewCell或UICollectionViewCell的类。这个类应该符合FSQCellManifestTableViewCellProtocol或FSQCellManifestCollectionViewCellProtocol(根据适用性)。

model应该是一个单元格类可以使用来渲染其内容并计算其大小的对象。它可以是任何你喜欢的对象,从简单的字符串到一个复杂的数据对象(例如,在Foursquare中,单元格的一个模型可能是一个用户或一个地点)。你可以使用任何对你应用有意义的东西,只要单元格类在设计FSQCellManifestProtocol方法的实现中准备好接受匹配的类型即可。在需要计算其视图的大小(例如,tableView:heightForRowAtIndexPath:)和单元格被提取以渲染其新内容时,声明将调用这些方法在你的单元格类,传递模型对象。

你可以使用上述描述的属性和接口,仅使用FSQCellManifest使简单表格或集合视图运行起来。查看随本项目提供的示例应用,以查看使用这些特性构建的简化表格视图。

进一步定制选项

对于需要更复杂定制的屏幕,有大量其他属性和委托回调可供使用,以下是一些摘要。

可以按多种方式(例如插入、删除和替换)重新排序或修改部分和单元格记录。所有必需的数据源和委托回调都可以通过向声明调用简单单方法调用来处理,以渲染你的变更。

可以选择在FSQCellRecords中添加选择块,以便在用户点击单元格时执行操作。相关的是,是否允许单元格突出显示/选择,可以根据这些块的缺失自动推断,或者手动设置。

可以通过向FSQCellRecords添加在提取时执行的配置块来对FSQCellRecords进行一次性定制,而无需创建一个新子类或向现有类添加复杂的逻辑。

在几乎每个清单操作前后都有委托回调,允许您在不创建新子类的情况下添加自己的代码。此外,可以转发从UITableView或UICollectionView的委托和数据源回调到清单的委托。

扩展功能

如果您想向单元格清单添加额外功能,由于您需要分别子类化表格和集合视图版本,并且可能需要复制和粘贴代码,因此很难通过子类化来完成。为了解决这个问题,单元格清单支持一个插件系统,它允许您在分离的区域类中更容易地添加额外功能。

插件就像一个额外的委托对象,它可以接收清单的所有许多委托回调,包括实际的委托对象。在这些回调中,它可以做任何它想要做的额外工作以支持其功能。例如,您可以编写一个记录更改时写入控制台的自定义插件。或者,您可以编写一个检测单元格在屏幕上完全滚动超过一秒时(例如,用于记录广告印象)的插件。您可以放在UI[Table/Collection]ViewController的基础子类中的任何代码都是一个很好的插件候选。

插件可以在初始化清单时设置,或者稍后添加或删除。这样,仅在需要时才能添加仅某些屏幕需要的功能。插件还使您能够轻松编写适用于表格视图或集合视图的通用代码,因为清单的方法在很大程度上是相同的。

贡献者

FSQCellManifest最初由Foursquare Labs为内部使用而开发。它最初由Brian Dorfman编写并维护(@bdorfman)。