是什么?
床头柜是一个完全可自定义且方便的构建静态表格视图的方法。它消除了实现委托和数据源方法的必要性;只需构建您的行和部分,并按需进行配置。床头柜会负责其他工作。
床头柜允许您使用内置的单元格类型,或自定义单元格类型。您还可以通过使它们符合必要的协议来直接使用现有的 UIViewControllers 或 UITableViewDataSource。
为什么要使用它?
传统的表格视图实现可能会变得难以控制,因为它们需要在多个委托和数据源方法中分散逻辑。当我们处理静态表格时,更易于以 部分 和 行 为单位考虑,而不是以委托和数据源为单位。
床头柜允许您通过仅定义一组部分和行来构建整个表格,而不必与委托或数据源方法一起工作。这使得您可以考虑表格视图的更多静态方面。
床头柜最有趣的功能之一是,它允许您定义和使用自己的 UITableViewCell,因此可能性是无限的。
行
床头柜的 行 类型代表部分内的单个行。一行可以是有内置类型之一:默认、副标题、值1或值2
let row = Row<DefaultTableViewCell>(...)
或者一个 行 可以是您定义的自定义单元格类型。
let row = Row<UserTableViewCell>(...)
一行有 模型、操作 和 配置。
- 行的 模型 定义了行将用于填充其视图的数据。
let model = DefaultTableViewCell.Model(text: "Hello World", image: nil)
- 行的 操作 定义了当选中时会发生什么(可选)或者当其附加视图被选中时会发生什么。
let actions = TableViewCellActions(didSelectCell: { navigateToAnotherView() },
didTapAccessoryView: { displayAlert() })
- 一行的 配置 定义了其样式。
var configuration = TableViewCellConfiguration()
configuration.selectionStyle = .none
configuration.accessoryType = .detailButton
部分
床头柜的 部分 类型表示表格中的单个部分。
let section = Section(title: "Hello World",
rows: [
Row<DefaultTableViewCell>(...),
Row<Value1TableViewCell>(...),
Row<UserTableViewCell>(...) ])
将所有元素组合起来
一旦您定义了您的 行 和 部分,您就可以使用它们来初始化您的床头柜
let nightstand = Nightstand(sections: sections)
床头柜 符合 UITableViewDelegate
和 UITableViewDataSource
,并且已扩展以具有所有支持方法的默认实现。您的唯一任务是将 Nightstand
设置为 UITableViewController
的数据源和代理。
tableView.dataSource = nightstand
tableView.delegate = nightstand
床头柜将负责其余的工作。
如果您遇到任何问题,或想查看更多代码,请参阅示例项目。要运行示例项目,首先从 Example 目录中克隆仓库,然后运行 pod install
。
创建自定义单元格
可以在 Nightstand 表中使用您自己的 UITableViewCell。确保您的单元格定义了以下初始化器
override init(style: UITableViewCell.CellStyle, reuseIdentifier: String?) {
super.init(style: style, reuseIdentifier: UserTableViewCell.reuseIdentifier)
// You can add any additional initialization logic here
}
Nightstand 扩展了 UITableViewCell,因此它默认具有一个 reuseIdentifier
。实际上,上述初始化器就足够实现单元格重用。
接下来,您需要让您的单元格符合 Configurable
协议。此协议有两个要求
associatedtype Model
func configure(with model: Model)
您可以显式定义您的单元格的 Model,如下所示
extension UserTableViewCell {
struct Model {
var name: String
var age: Int?
var image: UIImage?
}
}
您还可以使用应用程序其他部分中的模型
extension UserTableViewCell: Configurable {
typealias Model = SomeOtherModel
}
然后,您只需实现所需的方法
extension UserTableViewCell: Configurable {
func configure(with model: Model) {
nameLabel.text = model.name
ageLabel.text = String(age)
profileImageView.image = image
}
}
安装
CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理器。要使用 CocoaPods 安装 Nightstand
请更新 Podfile 以包含以下内容
use_frameworks!
pod 'Nightstand'
运行 pod install。
Carthage
即将推出
如何报告问题?
请使用 GitHub 问题报告任何问题
如何贡献代码?
请为任何小的修复或贡献提交一个 Pull Request。对于任何重要的贡献或想法,请随时联系我或提交一个问题,我会很高兴与你讨论。
作者
泰勒·内维尔丁,[email protected]
许可协议
Nightstand 在 MIT 许可协议下可用。更多信息请参阅 LICENSE 文件。