DTTableViewManager
特性
- 数据模型和单元格、头部和尾部之间的强大映射系统
- 自动数据源和界面同步。
- 灵活的 Memory/CoreData/Realm/diffable 数据源存储选项
- 强大的编译时安全事件系统,涵盖了所有的 UITableView delegate 方法
- 从代码、XIB 或 storyboard 创建的视图,自动注册和回收
- 可用于 UITableViewController 或具有 UITableView 的 UIViewController
- 与 DTCollectionViewManager 兼容的统一语法
- 支持 iOS 13+ / tvOS 13+ / macCatalyst 13+ 的 SwiftUI 支持背景单元格
- 完整的文档
- API 参考
要求
- Xcode 13+
- iOS 11.0+ / tvOS 11.0+ / macCatalyst 13.0+
- Swift 5.3+
如果您需要 Xcode 11 支持或 Swift 4...Swift 5.2,或 iOS 8...iOS 10 的支持,您可以使用 7.x 版本。
安装
Swift 包管理器
将包添加到 Xcode 项目的设置中 -> Swift 包
CocoaPods
pod 'DTTableViewManager', '~> 11.0.0-beta.1'
快速入门
假设你有一个包含多个 Post 的数组,你想在 UITableView 中显示它们。要快速使用 DTTableViewManager 显示它们,你需要做以下事情
- 创建 UITableViewCell 的子类,比如 PostCell,并实现
ModelTransfer
协议
class PostCell : UITableViewCell, ModelTransfer {
func update(with model: Post) {
// Fill your cell with actual data
}
}
- 在你的视图控制器中
class PostsViewController: UITableViewController, DTTableViewManageable {
override func viewDidLoad() {
super.viewDidLoad()
// Register PostCell to be used with this controller's table view
manager.register(PostCell.self)
// Populate datasource
manager.memoryStorage.setItems(posts)
}
}
确保你的 UITableView 出口已连接到你的类(或使用 UITableViewController 子类)。如果你有一个 PostCell.xib 文件,它将自动用于 PostCell 的 dequeuing。
- 就这样!就这么简单!
当然,酷炫的功能不仅限于此,框架支持所有数据源和代理方法作为闭包,条件映射等等!在下一个 readme 部分的下一节中选择你对什么感兴趣。
燃烧的问题
入门包
- 我为什么需要这个库?
- 数据模型是如何映射到单元格的?
- 我可以在UITableViewCells中显示SwiftUI视图吗?
- 我可以使用未子类化的UITableViewCell或UITableViewHeaderFooterView吗?
- 我该如何将视图注册到代码/xib/storyboard中以便进行解包?
- 我怎么能在不同的位置以不同的方式使用相同的单元格?
- 我有哪些数据源选项?(例如:内存、CoreData、Realm、diffable数据源)
- 我怎么实现UITableView的dataSource/delegate方法?
高级
- SwiftUI支持的单元格
- 我可以通过实现代理方法来替代使用DTTableViewManager事件闭包吗?
- 我该如何对UITableView的更新进行响应和自定义配置?
- 在使用DTTableViewManager与UITableView时,可以额外配置哪些内容?
- 如果出现问题该怎么办?
示例代码和文档
感谢
- Alexey Belkevich 对于提供CellFactory的初始实现。
- Michael Fey 对于对NSFetchedResultsController的更新提供见解。
- Nickolay Sheika 对于提供宝贵的反馈,帮助塑造3.0版本发布和库的未来方向。
- Artem Antihevich 对于关于Swift泛型和类型捕获的精彩讨论。