静态 4.0.1

Static 4.0.1

测试已测试
语言语言 SwiftSwift
许可证 MIT
发布最后一次发布2020年10月
SPM支持 SPM

Sam SoffesEli PerkinsMark AdamsMark AdamsKeita Ito 维护。



Static 4.0.1

  • Venmo 和 Sam Soffes

Static Logo

Version Status Swift Version Carthage compatible

简单的 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,您需要定义 RowSection 来描述您的数据。这里有一个简单的例子

import Static

Section(rows: [
    Row(text: "Hello")
])

您可以配置任何 SectionRow。这里还有另一个例子

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 风格。将 textLabeltextColor 设置为单元格的 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。这是一个枚举,具有 TitleView 情况。ExtremityStringLiteralConvertible,您可以简单地指定字符串,就像我们在 入门 部分中那样。

对于自定义视图,您只需简单指定 View 情况

Section(header: .view(yourView))

返回给表格视图的高度将是视图的 bounds.height,因此请确保它已经正确设置大小。

处理数据源

要将 分区 连接到表格视图,只需初始化一个 数据源

let dataSource = DataSource()
dataSource.sections = [
    Section(rows: [
        Row(text: "Hello")
    ])
]

现在分配您的表格视图

dataSource.tableView = tableView

如此简单!如果您以后修改了数据源,它将自动为您更新表格视图。非常重要的一点是,您不要更改表格视图的 dataSourcedelegate数据源 需要这些都是,以便它能够正确处理事件。《静态》的目的就是将所有的东西都抽象出来。

总结

提供了一个名为 TableViewController数据源。下面是一个简短示例

class SomeViewController: TableViewController {
    override func viewDidLoad() {
        super.viewDidLoad()
        dataSource.sections = [
            Section(rows: [
                Row(text: "Hi")
            ]),
            // ...
        ]
    }
}

祝您玩得开心。