Skip to content

Refreshable

林洵锋 edited this page Aug 29, 2020 · 5 revisions

1、遵守协议 Refreshable

class LXFRefreshableController: UIViewController, View, Refreshable {}

2、配置与绑定

// 自定义配置
/* 
rx.refresh<T: RefreshControllable>(
	_ vm: T, 
	_ scrollView: UIScrollView, 
	headerConfig: RefreshableHeaderConfig? = nil, 
	footerConfig: RefreshableFooterConfig? = nil
) -> Observable<RefreshType>
*/

// 注:vm 需要传入一个遵守了 RefreshControllable 协议的对象

self.rx.refresh(reactor, tableView)
    .map { .fetchList($0 == .header) }
    .bind(to: reactor.action)
    .disposed(by: disposeBag)

这里也可以单独设置上下拉

// 自定义配置
self.rx.headerRefresh(reactor, tableView, headerConfig: RefreshConfig.normalHeader)
    .map { .fetchList(true) }
    .bind(to: reactor.action)
    .disposed(by: disposeBag)

// 默认配置
self.rx.footerRefresh(reactor, tableView)
    .map { .fetchList(false) }
    .bind(to: reactor.action)
    .disposed(by: disposeBag)

3、viewModel 遵守协议

final class LXFRefreshableReactor: Reactor, RefreshControllable {}

遵守协议 RefreshControllable 后便拥有 refreshStatus 属性,可以用来控制刷新控件的状态

self.lxf.refreshStatus.accept(.noMoreData)
self.lxf.refreshStatus.accept(.resetNoMoreData)

lxf_Refreshable

如果一个界面有多个 UIScrollView ,且需要分别控件刷新状态,那么可以使用 refreshStatusRespective 属性

// 参数一:状态
// 参数二:UIScrollView 的 tag
lxf.refreshStatusRespective.accept((.noMoreData, viewTag))
Clone this wiki locally