简单的 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")
]),
// ...
]
}
}
祝您玩得开心。