床头柜 0.2.0

Nightstand 0.2.0

Tyler Neveldine 维护。



  • 作者:
  • tnev

Logo

Version Platform Swift Version

是什么?

床头柜是一个完全可自定义且方便的构建静态表格视图的方法。它消除了实现委托和数据源方法的必要性;只需构建您的行和部分,并按需进行配置。床头柜会负责其他工作。

床头柜允许您使用内置的单元格类型,或自定义单元格类型。您还可以通过使它们符合必要的协议来直接使用现有的 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)

床头柜 符合 UITableViewDelegateUITableViewDataSource,并且已扩展以具有所有支持方法的默认实现。您的唯一任务是将 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 文件。