DataViewable 是一个可扩展的、基于协议的框架,旨在简化在任何用于向用户展示数据的视图上显示空数据集和加载指示器的过程。DataViewable
协议定义了一个用于创建空数据集的接口。DataViewable
协议扩展中的默认实现提供了轻松在任何视图类型上实现空数据集和加载指示器所需的大部分逻辑。对 DataViewable
协议的有条件遵循允许我们为各种 UI 元素(UITableView
、UICollectionView
、UIImageView
、UIView
等)提供有用的默认实现覆盖。
将 pod "DataViewable"
行添加到您的 Podfile
将 github "stablekernel/DataViewable"
行添加到您的 Cartfile
克隆仓库并将 Sources/ 中的文件拖到您的 Xcode 项目中。
将 .Package(url: "https://github.com/stablekernel/DataViewable.git", majorVersion: 0)
行添加到您的 Package.swift
实现 DataViewSource
和 emptyViewForDataView
以返回您希望显示的空视图。
extension ViewController: DataViewSource {
func emptyViewForDataView(_ dataView: DataViewable) -> UIView? {
let view = EmptyDataView(delegate: self)
view.imageView.image = #imageLiteral(resourceName: "error_image")
view.titleLabel.text = "Sorry, no data!"
view.detailLabel.text = "Something bad happened :("
view.button.setTitle("Reload", for: .normal)
return view
}
}
extension ViewController: EmptyDataViewDelegate {
func emptyDataViewWasPressed(_ emptyDataView: EmptyDataView) {
// Some action
}
func emptyDataViewDidPressButton(_ emptyDataView: EmptyDataView) {
reloadData()
}
func emptyDataViewDidPressImage(_ emptyDataView: EmptyDataView) {
// Some action
}
}
将此 DataViewSource
设置为某个 DataViewable
的 emptyDataSetSource
@IBOutlet weak var tableView: DataTableView!
override func viewDidLoad() {
super.viewDidLoad()
tableView.emptyDataSetSource = self
reloadData()
}
在获取数据之前将 isLoading
设置为 true
,并在完成后设置为 false
。像往常一样分配您的数据并重新加载您的视图。
func reloadData() {
tableView.isLoading = true
Store.fetchData { [weak self] result in
switch result {
case .value(let data):
self?.data = data
case .error(let error):
self?.error = error
}
self?.tableView.isLoading = false
self?.tableView.reloadData()
}
}
DataViewable 支持所有当前的 Apple 平台,最低版本要求如下