PagingDataControllerExtension
PagingDataController 是一个易于实现分页加载数据(分页)的库。它通过几行代码提供简短的设置。您无需担心页面管理,何时加载数据的下一页,等等。
PagingDataControllerExtension 是使用 SVPullToRefresh
构建的。因此,您无需手动添加控件。但如果您想的话,也可以自定义一切。
要求
- iOS 8.0+
- Xcode 8.3+
- Swift 3.1+
安装
PagingDataControllerExtension 可以通过 CocoaPods 获取。要安装它,只需将以下行添加到您的 Podfile 中
pod "PagingDataControllerExtension"
...
Provider 是一个处理分页加载数据的组件。一旦处理完成,将返回一个对象列表或错误。
DataSource 保存由 Provider 加载的所有数据,并按页顺序排列。
实现了 PagingDataController
的控制器本身包含一个 Provider 和一个 dataSource。虽然 dataSource
可以自动注入,但 provider
需要显式声明。
用法
- 创建一个新的项目。
- 在
ViewController.swift
中,添加一个tableView
或collectionView
显示项目列表。 - 创建
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]]
}
}
}
- 在
ViewController.swift
中,实现UITableViewDataSource
或UICollectionViewDataSource
的方法来渲染数据,使其符合PagingControllerProtocol
协议。
//Provider definition
lazy var provider = GithubUsersProvider()
复制以下方法并将其放置在 viewDidLoad()
下方
override func viewDidFinishLayout() {
super.viewDidFinishLayout()
setupForPaging()
}
- 要自定义参数,实现此方法
parametersForPage(_:)
- 要处理错误,实现此方法
errorWarningForPage(_:)
- 编译并运行,享受乐趣
作者
NGUYEN CHI CONG,[email protected]
授权
PagingDataControllerExtension 在 MIT 许可证下可用。有关更多信息,请参阅 LICENSE 文件。