Contents

stablekernel/dataviewable

DataViewable is an extensible, protocol-based framework to make it easy to display empty data sets and loading indicators for any view that is used to display data to users. The `DataViewable` protocol defines an interface for creating empty data sets. Default implementations in

CocoaPods:

Add the line pod "DataViewable" to your Podfile

Carthage:

Add the line github "stablekernel/DataViewable" to your Cartfile

Manual:

Clone the repo and drag the file files in Sources/ into your Xcode project.

Swift Package Manager:

Add the line .Package(url: "https://github.com/stablekernel/DataViewable.git", majorVersion: 0) to your Package.swift

Usage

Implement DataViewSource and emptyViewForDataView to return the empty view you wish to display.

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
  }
}

Set this DataViewSource as the emptyDataSetSource of some DataViewable


@IBOutlet weak var tableView: DataTableView!

override func viewDidLoad() {
  super.viewDidLoad()
  tableView.emptyDataSetSource = self
  reloadData()
}

Set isLoading to true before fetching your data and false when complete. Assign your data and reload your view as you normally would.

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()
  }
}

Platform support

DataViewable supports all current Apple platforms with the following minimum versions:

  • iOS 11
  • OS X: n/a
  • watchOS: n/a
  • tvOS: n/a

Package Metadata

Repository: stablekernel/dataviewable

Default branch: master

README: README.md