mirror of
https://github.com/Finb/Bark.git
synced 2025-12-08 21:36:01 +00:00
历史消息下拉刷新
This commit is contained in:
parent
00561c0ec2
commit
91413a6032
@ -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 {
|
||||||
|
|||||||
@ -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(),
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user