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)