From 91413a6032ccbe94329557aa9e4227b3ed1544bb Mon Sep 17 00:00:00 2001 From: Fin Date: Wed, 26 May 2021 14:58:19 +0800 Subject: [PATCH] =?UTF-8?q?=E5=8E=86=E5=8F=B2=E6=B6=88=E6=81=AF=E4=B8=8B?= =?UTF-8?q?=E6=8B=89=E5=88=B7=E6=96=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Common/MJRefresh+Rx.swift | 9 +++++---- Controller/MessageListViewController.swift | 2 ++ Controller/MessageListViewModel.swift | 22 ++++++++++++++++------ 3 files changed, 23 insertions(+), 10 deletions(-) diff --git a/Common/MJRefresh+Rx.swift b/Common/MJRefresh+Rx.swift index 8854c32..2a9bf87 100644 --- a/Common/MJRefresh+Rx.swift +++ b/Common/MJRefresh+Rx.swift @@ -57,12 +57,13 @@ extension Reactive where Base:UIScrollView { switch action{ case .begainRefresh: - if let header = target.mj_header { - header.beginRefreshing() + //下拉刷新使用 UIRefreshControl + if let control = target.refreshControl { + control.beginRefreshing() } case .endRefresh: - if let header = target.mj_header { - header.endRefreshing() + if let control = target.refreshControl { + control.endRefreshing() } case .begainLoadmore: if let footer = target.mj_footer { diff --git a/Controller/MessageListViewController.swift b/Controller/MessageListViewController.swift index 17ad73f..f21b275 100644 --- a/Controller/MessageListViewController.swift +++ b/Controller/MessageListViewController.swift @@ -63,6 +63,7 @@ class MessageListViewController: BaseViewController { } tableView.rx.setDelegate(self).disposed(by: rx.disposeBag) tableView.mj_footer = MJRefreshAutoFooter() + tableView.refreshControl = UIRefreshControl() } override func bindViewModel() { @@ -105,6 +106,7 @@ class MessageListViewController: BaseViewController { let output = viewModel.transform( input: MessageListViewModel.Input( + refresh: tableView.refreshControl!.rx.controlEvent(.valueChanged).asDriver(), loadMore: tableView.mj_footer!.rx.refresh.asDriver(), itemDelete: tableView.rx.itemDeleted.asDriver(), itemSelected: tableView.rx.modelSelected(MessageTableViewCellViewModel.self).asDriver(), diff --git a/Controller/MessageListViewModel.swift b/Controller/MessageListViewModel.swift index cfdedd7..7b5a2e1 100644 --- a/Controller/MessageListViewModel.swift +++ b/Controller/MessageListViewModel.swift @@ -14,6 +14,7 @@ import RealmSwift class MessageListViewModel: ViewModel,ViewModelType { struct Input { + var refresh: Driver var loadMore: Driver var itemDelete: Driver var itemSelected: Driver @@ -80,6 +81,20 @@ class MessageListViewModel: ViewModel,ViewModelType { let messagesRelay = BehaviorRelay<[MessageSection]>(value: []) let refreshAction = BehaviorRelay(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.just(()) .concat(input.loadMore) .subscribe(onNext: {[weak self] in @@ -151,12 +166,7 @@ class MessageListViewModel: ViewModel,ViewModelType { } strongSelf.page = 0 - let messages = strongSelf.getNextPage() - let cellViewModels = messages.map({ (message) -> MessageTableViewCellViewModel in - return MessageTableViewCellViewModel(message: message) - }) - messagesRelay.accept([MessageSection(header: "model", messages: cellViewModels)]) - + messagesRelay.accept(messagesToMessageSection(messages: strongSelf.getNextPage())) }).disposed(by: rx.disposeBag)