RLDTableViewSuite 0.2.0

RLDTableViewSuite 0.2.0

测试已测试
语言语言 Obj-CObjective C
许可 Apache 2
发布最后发布2015年5月

Rafael Lopez Diez 维护。



  • Rafael Lopez Diez

无处不在的UITableView,以及其所要求的dataSource和delegate,是iOS平台上糟糕架构的主要来源之一。SDK类,如UITableViewController,强制执行糟糕的设计实践,并导致大规模视图控制器问题,其中单职责原则完全失灵。

RLDTableViewSuite是一组可立即使用的协议和类,将帮助您回到正确的轨道,帮助您精炼应用的结构。它们强制遵循SOLID原则,并采用模型-视图-表示模式。

RLDTableViewSuite sample app

还提供Swift版本

基础知识

RLDTableViewDataSource 和 RLDTableViewDelegate

这些类是您所有表格视图的dataSource和delegate的可重用组件。使用它们,您无需再次编写相同的基础代码 - 它们将仅使用您的表格视图模型和事件处理程序来管理任何UITableView

它们完全实现了UITableViewDataSourceUITableViewDelegate协议,并在彼此之间保持同步,使您几乎无需自己努力即可获得所有UITableView功能。

  • 显示定制
  • 支持可变高度
  • 带有头部和尾部的分区
  • 分区索引标题
  • 单元格附件(可展开的)
  • 单元格的高亮显示和选择
  • 编辑、移动和重新排序单元格
  • 缩进
  • 复制和粘贴

表格视图模型

表格视图模型定义了表格视图中视图的状态、外观和感觉,以及它们之间的关系。您可以使用自己的类,符合相应的模型协议,或者提供的通用实现,名称相同

  • RLDTableViewCellModel,用于单元格,
  • RLDTableViewSectionModel,用于表格分区,
  • RLDTableViewSectionAccessoryViewModel,用于分区头部和尾部,
  • 以及RLDTableViewModel,用于表格视图本身。

事件处理程序

您表格视图中的每个视图(如单元格、分区头部和分区尾部)应由事件处理程序管理。它将接收来自表格视图代理的所有视图相关动作,并对视图上的用户生成事件做出反应。

事件处理器是Short-lived objects,它会在需要时实例化,当引起其创建的事件被处理或当控制它们的管理视图被释放时将被销毁。它们不应该存储状态(因为我们有模型,对吧?)并且它们可以自行配置视图的外观,或者将视图模型传递给视图,以便进行自动配置。提供的示例应用程序使用了最新的方法。

您有两个事件处理器协议,以及这两个协议的通用实现

  • RLDTableViewCellEventHandler,用于表格单元格

RLDTableViewSectionAccessoryViewEventHandler,用于分区标题和页脚。

尽管不是强制性的,但如果视图符合RLDHandledViewProtocol,它将在首次显示视图之前收到事件处理器。视图可以在整个生命周期中保留此事件处理器,以便能够对视图上的用户生成事件做出响应。

如果视图实现可选的eventHandler方法来返回保留的事件处理器,则代表会尝试与单元格一起重用它。如果您的视图对性能有关注,建议您让视图完全符合RLDHandledViewProtocol

事件处理器提供者

为了按需创建最合适的事件处理器,RLDTableViewDelegate需要符合RLDTableViewEventHandlerProvider协议的事件处理器提供者。

如果您不想编写自己的提供者,您可以使用包含的通用实现,其名称与协议一致。此类有一个工厂方法,它将遍历与提供者注册的所有类,返回当前支持某种表格视图、视图和视图模型组合的第一个事件处理器。

如果没有与提供者注册任何类,它将检查所有在运行时可用的类,寻找符合事件处理器协议的类。这可能会非常耗时,因为通常在运行时会加载数千个类,所以手动将类注册到事件处理器提供者是非常推荐的。

#import "RLDTableViewEventHandlerProvider.h"
...

+ (void)load {
    [RLDTableViewEventHandlerProvider registerEventHandlerClass:self];
}

在手动注册的情况下,确保所有类在所需时都准备好了的最佳方法是,在它们的load方法中注册。包含的示例应用程序实现了这种方法。

RLDTableViewController

此类是UITableViewController的替代品。它只需要一个表格视图模型来配置您的表格视图。内部,它使用RLDTableViewDataSourceRLDTableViewDelegateRLDTableViewEventHandlerProvider的默认实现,因此是使用RLDTableViewSuite而不用担心其内部结构、同时充分利用良好架构的最简单方法。

安装

  1. 克隆、将其添加 为子模块或下载
  2. 将所有位于Classes下的文件添加到您的项目中。
  3. 享受吧。

许可

RLDTableViewSuite可在Apache License,Version 2.0下使用。请参阅LICENSE文件以获取更多信息。

此README文档是用(GitHub-Flavored) Markdown Editor制作的