Bark/Common/MJRefresh+Rx.swift
2021-10-12 16:02:34 +08:00

85 lines
2.3 KiB
Swift

//
// MJRefresh+Rx.swift
// Bark
//
// Created by huangfeng on 2020/11/22.
// Copyright © 2020 Fin. All rights reserved.
//
import Foundation
import MJRefresh
import RxCocoa
import RxSwift
extension Reactive where Base: MJRefreshComponent {
var refresh: ControlEvent<Void> {
let source = Observable<Void>.create { [weak control = self.base] observer -> Disposable in
MainScheduler.ensureExecutingOnScheduler()
guard let control = control else {
observer.onCompleted()
return Disposables.create()
}
control.refreshingBlock = {
observer.onNext(())
}
return Disposables.create()
}
return ControlEvent(events: source)
}
}
enum MJRefreshAction {
///
case none
///
case begainRefresh
///
case endRefresh
///
case begainLoadmore
///
case endLoadmore
///
case showNomoreData
///
case resetNomoreData
}
extension Reactive where Base: UIScrollView {
///
var refreshAction: Binder<MJRefreshAction> {
return Binder(base) { target, action in
switch action {
case .begainRefresh:
// 使 UIRefreshControl
if let control = target.refreshControl {
control.beginRefreshing()
}
case .endRefresh:
if let control = target.refreshControl {
control.endRefreshing()
}
case .begainLoadmore:
if let footer = target.mj_footer {
footer.beginRefreshing()
}
case .endLoadmore:
if let footer = target.mj_footer {
footer.endRefreshing()
}
case .showNomoreData:
if let footer = target.mj_footer {
footer.endRefreshingWithNoMoreData()
}
case .resetNomoreData:
if let footer = target.mj_footer {
footer.resetNoMoreData()
}
case .none:
break
}
}
}
}