PagingDataController
!
DEPRECATED Please use
PagingDataControllerExtension
PagingDataController is a library for implementing loading data by page (pagination) easily. It provides a short setup via few lines of code. You will not need to worry about page management, when to load the next page's data, and so on.
PagingDataControllerExtension is built with SVPullToRefresh
. So you do not have to manually add controls. But you can customize everything if you want.
Requirements
- iOS 8.0+
- Xcode 8.3+
- Swift 3.1+
Installation
PagingDataControllerExtension is available through CocoaPods. To install it, simply add the following line to your Podfile:
pod "PagingDataControllerExtension"
How it works?
Provider is a component which handles loading data by page. A list of objects or error will be returned once it is finished in processing.
DataSource keeps all of data which loaded by provider and arranges them in order of page.
A controller which implements PagingDataController
includes a provider and a dataSource itself. While dataSource
is injected automatically, provider
needs to be declared explicit.
Usage
- Create a new project.
- In
ViewController.swift
, add atableView
orcollectionView
to display list of items. - Create
Provider
:
import UIKit
import PagingDataController
import Alamofire
struct GithubUsersProvider: PagingProviderProtocol {
//custom pageSize here
var pageSize: Int = 36
func loadData(parameters: AnyObject?, page: Int, completion: (([Dictionary<String, AnyObject>], Error?) -> ())?) {
let apiPath = "https://api.github.com/search/users?q=apple&page=\(page+1)&per_page=\(pageSize)"
Alamofire.request(apiPath, method: .get).responseJSON { (response) in
var error: Error? = response.result.error
var result: [[String: AnyObject]] = []
defer {
completion?(result, error)
}
guard let data = (response.result.value as? [String: AnyObject]) else {
return
}
result = data["items"] as! [[String: AnyObject]]
}
}
}
- In
ViewController.swift
, Implement the methods ofUITableViewDataSource
orUICollectionViewDataSource
to render data, make it conforms protocolPagingControllerProtocol
//Provider definition
lazy var provider = GithubUsersProvider()
Copy this method and put it below viewDidLoad()
:
override func viewDidFinishLayout() {
super.viewDidFinishLayout()
setupForPaging()
}
- To custom parameters, implement this method
parametersForPage(_:)
- To error handling, implement this method
errorWarningForPage(_:)
- Build & Run to enjoy
Author
NGUYEN CHI CONG, congnc.if@gmail.com
License
PagingDataControllerExtension is available under the MIT license. See the LICENSE file for more info.