DataViewable

CocoaPods Carthage

DataViewable 是一个可扩展的、基于协议的框架,旨在简化在任何用于向用户展示数据的视图上显示空数据集和加载指示器的过程。DataViewable 协议定义了一个用于创建空数据集的接口。DataViewable 协议扩展中的默认实现提供了轻松在任何视图类型上实现空数据集和加载指示器所需的大部分逻辑。对 DataViewable 协议的有条件遵循允许我们为各种 UI 元素(UITableViewUICollectionViewUIImageViewUIView 等)提供有用的默认实现覆盖。

安装

CocoaPods

pod "DataViewable" 行添加到您的 Podfile

Carthage

github "stablekernel/DataViewable" 行添加到您的 Cartfile

手动

克隆仓库并将 Sources/ 中的文件拖到您的 Xcode 项目中。

Swift Package Manager

.Package(url: "https://github.com/stablekernel/DataViewable.git", majorVersion: 0) 行添加到您的 Package.swift

用法

实现 DataViewSourceemptyViewForDataView 以返回您希望显示的空视图。

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 设置为某个 DataViewableemptyDataSetSource

@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 平台,最低版本要求如下