| FazBrowse GitHub Viewer | Trending | | Home |
| Tools: [Download Repo ZIP] [Original HTTPS Page] |
| Name | Name | Last commit date | ||
|---|---|---|---|---|
A Swift library allows you to create a flexibly customizable pull-to-refresh view supporting RxSwift.
Upgrading from 1.x? See the migration guide — 2.0.0 drops CocoaPods and Carthage in favour of Swift Package Manager.
In Xcode, select File > Add Package Dependencies… and enter:
https://github.com/futamura/RxPullToRefresh.git
Or add the following to your Package.swift:
dependencies: [
.package(url: "https://github.com/futamura/RxPullToRefresh.git", from: "2.0.0")
]Read the API reference for detailed information.
import RxSwift
import RxCocoa
import RxPullToRefreshCreate a RxPullToRefresh object.
// Create a RxPullToRefresh object
self.topPullToRefresh = RxPullToRefresh(position: .top)
// Add a RxPullToRefresh object to UITableView
self.tableView.p2r.addPullToRefresh(self.topPullToRefresh)By observing RxPullToRefreshDelegate, you can watch the state of a RxPullToRefresh object. This delegate is get called by the RxPullToRefresh object every time its state or scrolling rate is changed.
// 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)You can also conform to the delegate directly and assign it to delegate. The protocol refines NSObjectProtocol, so the conforming type has to inherit from NSObject — a plain Swift class does not compile.
final class ViewController: UIViewController, RxPullToRefreshDelegate {
func action(state: RxPullToRefreshState, progress: CGFloat, scroll: CGFloat) {
switch state {
case .loading: self.prepend()
default: break
}
}
}
self.topPullToRefresh.delegate = selfself.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)self.viewModel.canPrepend
.asDriver()
.drive(self.topPullToRefresh.rx.canLoadMore)
.disposed(by: self.disposeBag)override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.tableView.p2r.endAllRefreshing()
self.tableView.p2r.removeAllPullToRefresh()
}RxPullToRefresh allows you flexibly customize a refresh view by inheriting RxPullToRefresh and RxPullToRefreshView classes. Please check example sources for advanced usage.
Bug reports and pull requests are welcome. See CONTRIBUTING.md for how to build the project and run the checks, and SECURITY.md for how to report a vulnerability privately.
RxPullToRefresh is released under MIT license, which means you can modify it, redistribute it or use it however you like.
| Back | FazBrowse Home | New Git URL |