RxPullToRefresh
一个 Swift 库,允许您创建一个灵活可定制的支持 RxSwift 的下拉刷新视图。
特性
- 支持 UIScrollView、UITableView 和 UICollectionView
- 可自定义的刷新视图
- 可自定义的动画选项
- 配置选项以在拖动时加载数据或在用户松开手指后加载数据
- 错误处理
- 支持 RxSwift/RxCocoa
要求
- iOS 9.0 或更高版本
- Swift 4.2
安装
Carthage
将以下内容添加到您的 Cartfile
中,并按照 这些说明 操作。
github "gumob/RxPullToRefresh"
请勿忘记包括 RxSwift.framework 和 RxCocoa.framework。否则构建应用会失败。
CocoaPods
要将 RxPullToRefresh 集成到您的项目中,请将以下内容添加到您的 Podfile
。
platform :ios, '9.3'
use_frameworks!
pod 'RxPullToRefresh'
使用方法
请阅读 API 参考 和 USAGE.md 以获取详细信息。
基本使用
将框架导入到项目中
import RxSwift
import RxCocoa
import RxPullToRefresh
添加 RxPullToRefresh
创建一个 RxPullToRefresh 对象。
// Create a RxPullToRefresh object
self.topPullToRefresh = RxPullToRefresh(position: .top)
// Add a RxPullToRefresh object to UITableView
self.tableView.p2r.addPullToRefresh(self.topPullToRefresh)
观察 RxPullToRefreshDelegate
通过观察 RxPullToRefreshDelegate,您可以监视 RxPullToRefresh 对象的状态。每当其 状态 或滚动速率发生变化时,RxPullToRefresh 对象都会调用此委托。
// Observe RxPullToRefreshDelegate
self.topPullToRefresh.rx.action
.subscribe(onNext: { [weak self] (state: RxPullToRefreshState, progress: CGFloat, scroll: CGFloat) in
// Send request if RxPullToRefreshState is changed to .loading
switch state {
case .loading: self?.prepend()
default: break
}
})
.disposed(by: self.disposeBag)
加载和追加内容
self.viewModel.prepend()
.subscribe(onSuccess: { [weak self] in
// Successfully loaded, collapse refresh view immediately
self?.tableView.p2r.endRefreshing(at: .top)
}, onError: { [weak self] (_: Error) in
// Failed to load, show error
self?.tableView.p2r.failRefreshing(at: .top)
})
.disposed(by: self.disposeBag)
通过绑定布尔值到 canLoadMore 属性禁用刷新功能
self.viewModel.canPrepend
.asDriver()
.drive(self.topPullToRefresh.rx.canLoadMore)
.disposed(by: self.disposeBag)
销毁 RxPullToRefresh 对象
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.tableView.p2r.endAllRefreshing()
self.tableView.p2r.removeAllPullToRefresh()
}
高级使用
关于示例项目
RxPullToRefresh
允许您通过继承 RxPullToRefresh 和 RxPullToRefreshView 类来自定义刷新视图。请查看示例代码了解高级使用方法。
- CustomRefresh:继承自
RxPullToRefresh
的类。 - CustomRefreshView:继承自
RxPullToRefreshView
的类。在这个类中实现了动画逻辑。 - BaseTableViewController:遵循 MVVM 架构的视图控制器。
- CustomTableViewController:创建
CustomPullToRefresh
实例的视图控制器。 - TableViewModel:操作数据源的视图模型。
构建示例应用
- 更新 Carthage 框架
$ carthage update --platform iOS
- 打开
RxPullToRefresh.xcodeproj
- 从 Xcode 窗口左上角的下拉菜单中选择方案
RxPullToRefreshExample
- 按 ⌘R
版权
RxPullToRefresh 根据 MIT 许可证发布,这意味着您可以修改它、重新分发它或以您喜欢的任何方式使用它。