|
//
// MessageViewController.swift
// PaiAi
//
// Created by mac on 16/5/13.
// Copyright © 2016年 FFIB. All rights reserved.
//
import UIKit
import RxSwift
import RxCocoa
import RxDataSources
protocol MessageViewControllerDelegate: class {
func didSelect(item: MessageItem)
}
final class MessageViewController: UIViewController {
// MARK: Storyboard property
@IBOutlet var tableView: UITableView!
var emptyView : UILabel = {
let empty = UILabel(frame: CGRect(x: kScreenWidth / 2 - 50, y: 74, width: 50, height: 50))
empty.isHidden = true
empty.text = "当前没有任何消息"
empty.textColor = UIColor.gray
empty.font = UIFont.systemFont(ofSize: 14)
empty.sizeToFit()
return empty
}()
// MARK: data property
var messageViewModel: MessageViewModel? = nil
let disposeBag = DisposeBag()
weak var delegate: MessageViewControllerDelegate?
// MARK: parameter property
var type = MessageType.zan {
willSet {
messageViewModel = MessageViewModel(type: newValue)
}
}
// MARK: view function
override func viewDidLoad() {
super.viewDidLoad()
configureRxDataSource()
messageViewModel?.reload(isRefresh: true)
view.addSubview(emptyView)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
// titleWithbackBar = messageViewModel?.messageType.model.title ?? ""
navigationItem.setRightBars(buttonSpace: 0,
images: [UIImage(named: "更多-右上角-1")],
actions: [#selector(clearMessages)],
target: self)
}
var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>> {
return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>>(configureCell: { (dataSource, tableView, indexPath, item) in
switch self.type {
case .system:
let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell", for: indexPath) as! MessageCell
cell.setInfo(item)
return cell
case .comment, .zan:
let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) as! CommentCell
cell.setInfo(item, type: self.type)
return cell
}
}, canEditRowAtIndexPath: { _, _ in true })
}
func configureRxDataSource() {
messageViewModel?.hasData
.bind(to: emptyView.rx.isHidden)
.disposed(by: disposeBag)
messageViewModel?.messageContents
.bind(to: tableView.rx.items(dataSource: dataSource))
.disposed(by: disposeBag)
tableView.rx.modelDeleted(MessageItem.self)
.subscribe(onNext: { [unowned self] in self.messageViewModel?.remove($0)})
.disposed(by: disposeBag)
tableView.rx.modelSelected(MessageItem.self)
.subscribe(onNext: { [unowned self] in self.delegate?.didSelect(item: $0) })
.disposed(by: disposeBag)
tableView.rx.willDisplayCell
.subscribe({ [unowned self] in self.messageViewModel?.preload(indexPath: $0.element?.indexPath)})
.disposed(by: disposeBag)
}
// MARK: button function
@objc func clearMessages() {
let alert = FFAlertController(title: "", message: "", alertStyle: .actionSheet)
alert.addAlertAction(alertAction: DestructiveAlertAction(title: "清空消息", handler: { (alertAction) in
self.messageViewModel?.removeAll()
}))
alert.addAlertAction(alertAction: FFAlertAction(title: "取消", handler: nil))
presentController(alert)
}
}
|