简单的 iOS Swift 静态表格视图。Static 的目标是分离模型数据与表示。`Row` 和 `Section` 是单元格的“视图模型”。你只需指定要使用的单元格类,然后它会处理所有表示。有关详细信息,请参阅下方的 使用 部分。
版本兼容性
| Swift 版本 | Static 版本 |
|---|---|
| 5.0+ | 4.0.0 |
| 4.2+ | 3.0.1 |
| 3.2+ | 2.1 |
| 3.0.1 | 2.0.1 |
| 3.0 | 2.0 |
| 2.3 | 1.2 |
| 2.2 | 1.1 |
| 2.0 - 2.1 | 1.0 |
安装
Carthage
Carthage 是安装 Static 的推荐方式。将以下内容添加到 Cartfile 中
github "venmo/Static"CocoaPods
CocoaPods 是 Cocoa 项目的依赖管理工具。要使用 CocoaPods 安装 Static
确保 CocoaPods 已安装(Static 需要 0.37 或更高版本)。
更新您的 Podfile 以包含以下内容
use_frameworks!
pod 'Static', git: 'https://github.com/venmo/Static'运行 pod install。
手动安装
对于手动安装,建议将项目作为子项目添加到您的项目或工作区中,并将适当的框架作为目标依赖项添加。
使用说明
包含了一个示例应用程序,展示了 Static 的功能。
开始使用
为了使用 Static,您需要定义 Row 和 Section 来描述您的数据。这里有一个简单的例子
import Static
Section(rows: [
Row(text: "Hello")
])您可以配置任何 Section 和 Row。这里还有另一个例子
Section(header: "Money", rows: [
Row(text: "Balance", detailText: "$12.00", accessory: .disclosureIndicator, selection: {
// Show statement
}),
Row(text: "Transfer to Bank…", cellClass: ButtonCell.self, selection: {
[unowned self] in
let viewController = ViewController()
self.presentViewController(viewController, animated: true, completion: nil)
})
], footer: "Transfers usually arrive within 1-3 business days.")由于这是 Swift,我们可以提供实例方法而不是内联块来处理选择。这使得事情变得非常好。您不必再在 tableView:didSelectRowAtIndexPath: 中根据索引路径切换代码了!
自定义外观
设计上,《Row》没有访问到单元格的数据。这里有一个设计上的考量。《Row》不关心其外观,只需指定谁将处理样式即可。在实际应用中,这对我们来说非常好。我们的单元格只有一个职责。
提供了几种自定义单元格
Value1Cell— 这是默认的单元格。它是一个普通的UITableViewCell,具有.Value1风格。Value2Cell— 普通的UITableViewCell,具有.Value2风格。SubtitleCell— 普通的UITableViewCell,具有.Subtitle风格。ButtonCell— 普通的UITableViewCell,具有.Default风格。将textLabel的textColor设置为单元格的tintColor。
所有这些都遵守 Cell。协议的精髓是其中一个方法
func configure(row row: Row)由 DataSource(我们将在下一部分中更多地了解它)调用以设置单元格上的行。此协议提供了一个默认实现,它简单地设置了行的文本在单元格的 textLabel 等。如果您需要执行自定义操作,这是一个很好钩入的地方。
行 也拥有一个 上下文 属性。您可以将单元格需要知道的内容放入其中。您应尽可能少地使用这个属性。
自定义行附件
行 有一个 附件 属性,是一个 附件 枚举。它包含所有 UITableViewCellAccessoryType 的情况。这是一个带有勾选的行
Row(text: "Buy milk", accessory: .checkmark)很简单。一些系统附件类型是可选择的(比如那个带圆圈的 i 按钮)。您可以像这样处理它们的选择
Row(text: "Sam Soffes", accessory: .detailButton({
// Show info about this contact
}))同样,您可以使用任何函数。实例方法非常适合此用例。
还有一个名为 .view 的额外情况,它接受一个自定义视图。这是一个带有自定义附件视图的 行
Row(text: "My Profile", accessory: .view(someEditButton))自定义分区头部和底部视图
分区 拥有 头部 和 底部 属性。这些属性接受一个 Section.Extremity。这是一个枚举,具有 Title 和 View 情况。Extremity 是 StringLiteralConvertible,您可以简单地指定字符串,就像我们在 入门 部分中那样。
对于自定义视图,您只需简单指定 View 情况
Section(header: .view(yourView))返回给表格视图的高度将是视图的 bounds.height,因此请确保它已经正确设置大小。
处理数据源
要将 分区 和 行 连接到表格视图,只需初始化一个 数据源
let dataSource = DataSource()
dataSource.sections = [
Section(rows: [
Row(text: "Hello")
])
]现在分配您的表格视图
dataSource.tableView = tableView如此简单!如果您以后修改了数据源,它将自动为您更新表格视图。非常重要的一点是,您不要更改表格视图的 dataSource 或 delegate。数据源 需要这些都是,以便它能够正确处理事件。《静态》的目的就是将所有的东西都抽象出来。
总结
提供了一个名为 TableViewController 的 数据源。下面是一个简短示例
class SomeViewController: TableViewController {
override func viewDidLoad() {
super.viewDidLoad()
dataSource.sections = [
Section(rows: [
Row(text: "Hi")
]),
// ...
]
}
}祝您玩得开心。
