TableSchemer 是一个用于构建静态交互式表格视图的框架。Interface Builder 提供了一种很好的方法来构建静态表格视图,但并不是每个人都使用 Interface Builder,并且将这些表格视图添加交互功能是困难的。传统上编写交互式静态表格视图是一项繁琐的任务,因为需要与索引路径打交道,并且有多个代理方法来处理配置、尺寸和选择处理。当需要重新排序时,它们也难以维护,因为需要在所有这些位置更新索引路径。
特性
基于闭包的表格视图
使用闭包构建您的表格视图,并将所有单元格逻辑放在一个位置。忘记索引路径比较,专注于编写您的逻辑。由于 Swift 中的泛型,您只需工作于您的单元格类型,无需担心类型转换。
内置方案
TableSchemer内置了多种强大的方案。其中包括基本方案(适用于您只需要渲染单个单元格的情况)、单选方案(适用于您需要在多个单元格中一次性选择一个单元格的情况)、数组方案(适用于您需要支持特定对象的动态单元格集)以及手风琴方案(适用于您需要一个单元格扩展成多个以实现展开选择的场景)。请查看如何使用这些方案这里。
可扩展
您可以轻松创建自己的方案并将它们添加到您的表格中。通过少数方法重载,您可以开始为用户提供独特的直观控件。
入门
- 下载TableSchemer并使用示例应用查看其功能。关于如何运行示例项目的说明,请参阅示例项目。
- 通过将其安装到自己的应用中来开始构建自己的表格。有关如何使用TableSchemer的更多信息,请参阅使用TableSchemer。
要求
TableSchemer使用Swift 5构建,因此您需要使用Xcode 10.2。它支持iOS 8.0及以上。
用法
TableSchemer通过创建一个TableScheme对象并将其设置为UITableView的dataSource属性来实现。以下是如何使用带有UITableViewController的示例。
class MasterViewController: UITableViewController {
var tableScheme: TableScheme!
override func viewDidLoad() {
super.viewDidLoad()
createTableScheme()
tableView.rowHeight = 44.0
}
func createTableScheme() {
tableScheme = TableScheme(tableView: tableView) { builder in
builder.buildSchemeSet { builder in
builder.buildScheme { (scheme: BasicSchemeBuilder<UITableViewCell>) in
scheme.configurationHandler = { cell in
cell.textLabel?.text = "Tap here for an advanced example."
cell.accessoryType = .disclosureIndicator
}
// We're specifying weak self here because handlers are retained by the schemes. Without it, we'd have a retain cycle.
scheme.selectionHandler = { [weak self] cell, scheme in
let advancedController = AdvancedTableSchemeViewController(style: .grouped)
self?.navigationController?.pushViewController(advancedController, animated: true)
}
}
}
}
}
}
TableSchemer将自身设置为表格视图的数据源和代理。如果需要是表格视图的代理人,请在实际创建方案后再更新。要使用内置的选择和高度处理,您必须确保将那些代理方法转发给tableScheme对象。签名的格式与UITableViewDelegate
中相同。有关更多信息,请查看使用TableSchemer页面,并确保查看我们的示例应用!
示例项目
有一个示例项目展示了多种使用 TableSchemer 的方法。要运行它们,请克隆仓库并运行 TableSchemerExamples 目标。
联系方式
- 如果您需要帮助或有一般性的问题,请使用 Stack Overflow
- 如果您发现了错误或有功能请求,请 打开一个问题
我们经常在 Gitter 聊天室!
贡献
我们非常愿意您帮助我们使 TableSchemer 更好。请随意
- 如果您遇到了任何问题,请打开一个 issue。
- 将项目 Fork 并提交 pull request。在 pull request 可以为接受之前,必须签署捐赠者许可协议。
许可
版权所有 © 2019,Square
允许以源代码和二进制形式分发和使用,包括但不限于修改,只要满足以下条件
源代码的再分配必须保留上述版权声明、本条件列表以及以下免责声明。二进制形式的再分配必须在文档和/或其他提供随分发的材料中复制上述版权声明、本条件列表以及以下免责声明。未经书面许可,不得使用Weebly或其贡献者的名称来认可或推广从本软件衍生出的产品。此软件由版权所有者和贡献者“按原样”提供,并放弃任何明示或暗示的保证,包括但不限于适销性和针对特定目的的适用性的暗示保证。在任何情况下,Weebly公司不应对任何直接、间接、偶然、特殊、示范性或连锁损害(包括但不限于替代货物或服务的采购;使用、数据或利润的损失;或业务中断),无论由何种原因引起,并在任何责任理论(包括疏忽或不作为)中承担任何责任,即使提供方已被告知此类损害的可能性也是如此。