测试已测试 | ✓ |
Lang语言 | Obj-CObjective C |
许可证 | MIT |
发布上次发布 | 2016年8月 |
由以下人员维护:Hilmar Birgir Ólafsson,Jóhann Þorvaldur Bergþórsson,Alexander Annas Helgason。
PVGTableViewProxy
是一个辅助类,用于设置 UITableView
,其中您可以声明您的数据为简单的视图模型对象数组,PVGTableViewProxy
确保其被渲染。
在开发 QuizUp 的过程中,我们很快意识到,应用程序的很大一部分(以及大部分 iOS 应用)只是一个列表的集合。这使得我们转向 UITableView
,但我们立刻觉得使用起来很不方便。它的冗长、基于代理的 API 强迫我们每次使用它时都要写很多模板代码。作为 React 和其声明式、无状态 UI 方法的忠实粉丝,我们希望在 UITableView
上得到类似的东西。因此,PVGTableViewProxy
诞生了!
目前,PVGTableViewProxy
严重依赖于 Reactive Cocoa。
PVGTableViewProxy
通过 CocoaPods 提供。要安装它,只需将以下行添加到您的 Podfile
pod "PVGTableViewProxy"
PVGTableViewProxy
在 Example 子目录中包含了一个示例项目。为了运行示例项目,您必须通过 CocoaPods 安装依赖
cd Example
pod install
一旦安装了依赖项,您可以通过运行 PVGTableViewProxyExample
目标来运行项目。
首先,您需要创建一个具有 UITableView
的视图控制器。然后您创建一个 PVGTableViewProxy
并将您的表格视图和数据传递给它
self.items = @[[DemoCellViewModel new],
[DemoCellViewModel new]
[DemoCellViewModel new]];
PVGTableViewProxy *dataSource = [PVGTableViewProxy proxyWithTableView:self.tableView
dataSource:RACObserve(self, items)
builder:^(id<PVGTableViewProxyConfig> builder) {
UINib *nib = [UINib nibWithNibName:@"ExampleNib" bundle:nil];
[builder registerNib:nib forCellReuseIdentifier:@"exampleNibReuseIdentifier"];
}];
在构建器块中,您注册您的单元格重用标识符。`DemoCell` 必须满足 `PVGTableViewCell` 协议,而 `DemoCellViewModel` 必须满足协议 `PVGTableViewCellViewModel`。设置好这些之后,您可以修改 `self.items`,您的表格视图将更新。查看示例项目以更好地了解 `PVGTableViewProxy` 是一个好主意。
负责执行繁重任务的类,将表视图和数据源作为 RACSignal
拥有。 PVGTableViewProxy
在需要插入、删除和重新渲染单元格时表现得很智能。
表视图单元格需要满足的协议。 height
方法需要返回您的单元格高度作为 NSNumber
,在 cellForRowAtIndexPath
中调用 setup
方法。
表视图单元格视图模型需要满足的协议。它们具有单元格的独特标识符、唯一ID(即单元格代表的数据模型对象的唯一ID)和缓存ID,这可以让 PVGTableViewProxy
知道相应的单元格是否需要重新渲染。
你的数据信号的包装器。
PVGTableViewProxy
在 Tests 子目录中包含一系列单元测试。为了运行单元测试,您必须通过 CocoaPods 安装测试依赖项。
cd Tests
pod install
安装测试依赖项后,您可以在 Tests 目标上运行测试。单元测试在 Travis CI 上运行,您可以在本页面的顶部查看构建状态。
Jóhann Þ. Bergþórsson, [email protected]
Hilmar Birgir Ólafsson, [email protected]
Alexander Annas Helgason, [email protected]
PVGTableViewProxy
适用于 MIT 许可证。有关更多信息,请参阅 LICENSE 文件。
如果您发现错误,请随意打开一个问题,如果您想要贡献,请提交代码拉取请求!