Bark/Common/MJRefresh+Rx.swift
2021-05-26 14:58:19 +08:00

92 lines
2.4 KiB
Swift

//
// MJRefresh+Rx.swift
// Bark
//
// Created by huangfeng on 2020/11/22.
// Copyright © 2020 Fin. All rights reserved.
//
import Foundation
import RxCocoa
import RxSwift
import MJRefresh
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()
}
break
case .none:
break
}
}
}
}