测试已测试 | ✓ |
语言语言 | Obj-CObjective C |
许可 | Apache 2 |
发布最后发布 | 2015年5月 |
由 Rafael Lopez Diez 维护。
无处不在的UITableView
,以及其所要求的dataSource和delegate,是iOS平台上糟糕架构的主要来源之一。SDK类,如UITableViewController
,强制执行糟糕的设计实践,并导致大规模视图控制器问题,其中单职责原则完全失灵。
RLDTableViewSuite
是一组可立即使用的协议和类,将帮助您回到正确的轨道,帮助您精炼应用的结构。它们强制遵循SOLID原则,并采用模型-视图-表示模式。
还提供Swift版本。
这些类是您所有表格视图的dataSource和delegate的可重用组件。使用它们,您无需再次编写相同的基础代码 - 它们将仅使用您的表格视图模型和事件处理程序来管理任何UITableView
。
它们完全实现了UITableViewDataSource
和UITableViewDelegate
协议,并在彼此之间保持同步,使您几乎无需自己努力即可获得所有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
的替代品。它只需要一个表格视图模型来配置您的表格视图。内部,它使用RLDTableViewDataSource
、RLDTableViewDelegate
和RLDTableViewEventHandlerProvider
的默认实现,因此是使用RLDTableViewSuite
而不用担心其内部结构、同时充分利用良好架构的最简单方法。Classes
下的文件添加到您的项目中。RLDTableViewSuite
可在Apache License,Version 2.0下使用。请参阅LICENSE文件以获取更多信息。
此README文档是用(GitHub-Flavored) Markdown Editor制作的