历史消息下拉刷新

This commit is contained in:
Fin 2021-05-26 14:58:19 +08:00
parent 00561c0ec2
commit 91413a6032
No known key found for this signature in database
GPG Key ID: CFB59B99D87A7B93
3 changed files with 23 additions and 10 deletions

View File

@ -57,12 +57,13 @@ extension Reactive where Base:UIScrollView {
switch action{ switch action{
case .begainRefresh: case .begainRefresh:
if let header = target.mj_header { //使 UIRefreshControl
header.beginRefreshing() if let control = target.refreshControl {
control.beginRefreshing()
} }
case .endRefresh: case .endRefresh:
if let header = target.mj_header { if let control = target.refreshControl {
header.endRefreshing() control.endRefreshing()
} }
case .begainLoadmore: case .begainLoadmore:
if let footer = target.mj_footer { if let footer = target.mj_footer {

View File

@ -63,6 +63,7 @@ class MessageListViewController: BaseViewController {
} }
tableView.rx.setDelegate(self).disposed(by: rx.disposeBag) tableView.rx.setDelegate(self).disposed(by: rx.disposeBag)
tableView.mj_footer = MJRefreshAutoFooter() tableView.mj_footer = MJRefreshAutoFooter()
tableView.refreshControl = UIRefreshControl()
} }
override func bindViewModel() { override func bindViewModel() {
@ -105,6 +106,7 @@ class MessageListViewController: BaseViewController {
let output = viewModel.transform( let output = viewModel.transform(
input: MessageListViewModel.Input( input: MessageListViewModel.Input(
refresh: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(),
loadMore: tableView.mj_footer!.rx.refresh.asDriver(), loadMore: tableView.mj_footer!.rx.refresh.asDriver(),
itemDelete: tableView.rx.itemDeleted.asDriver(), itemDelete: tableView.rx.itemDeleted.asDriver(),
itemSelected: tableView.rx.modelSelected(MessageTableViewCellViewModel.self).asDriver(), itemSelected: tableView.rx.modelSelected(MessageTableViewCellViewModel.self).asDriver(),

View File

@ -14,6 +14,7 @@ import RealmSwift
class MessageListViewModel: ViewModel,ViewModelType { class MessageListViewModel: ViewModel,ViewModelType {
struct Input { struct Input {
var refresh: Driver<Void>
var loadMore: Driver<Void> var loadMore: Driver<Void>
var itemDelete: Driver<IndexPath> var itemDelete: Driver<IndexPath>
var itemSelected: Driver<MessageTableViewCellViewModel> var itemSelected: Driver<MessageTableViewCellViewModel>
@ -80,6 +81,20 @@ class MessageListViewModel: ViewModel,ViewModelType {
let messagesRelay = BehaviorRelay<[MessageSection]>(value: []) let messagesRelay = BehaviorRelay<[MessageSection]>(value: [])
let refreshAction = BehaviorRelay<MJRefreshAction>(value: .none) let refreshAction = BehaviorRelay<MJRefreshAction>(value: .none)
func messagesToMessageSection(messages:[Message]) -> [MessageSection] {
let cellViewModels = messages.map({ (message) -> MessageTableViewCellViewModel in
return MessageTableViewCellViewModel(message: message)
})
return [MessageSection(header: "model", messages: cellViewModels)]
}
input.refresh.drive(onNext: {[weak self] in
guard let strongSelf = self else { return }
strongSelf.page = 0
messagesRelay.accept(messagesToMessageSection(messages: strongSelf.getNextPage()))
refreshAction.accept(.endRefresh)
}).disposed(by: rx.disposeBag)
Observable<Void>.just(()) Observable<Void>.just(())
.concat(input.loadMore) .concat(input.loadMore)
.subscribe(onNext: {[weak self] in .subscribe(onNext: {[weak self] in
@ -151,12 +166,7 @@ class MessageListViewModel: ViewModel,ViewModelType {
} }
strongSelf.page = 0 strongSelf.page = 0
let messages = strongSelf.getNextPage() messagesRelay.accept(messagesToMessageSection(messages: strongSelf.getNextPage()))
let cellViewModels = messages.map({ (message) -> MessageTableViewCellViewModel in
return MessageTableViewCellViewModel(message: message)
})
messagesRelay.accept([MessageSection(header: "model", messages: cellViewModels)])
}).disposed(by: rx.disposeBag) }).disposed(by: rx.disposeBag)