暂无描述

MessageViewController.swift 3.8KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. //
  2. // MessageViewController.swift
  3. // PaiAi
  4. //
  5. // Created by mac on 16/5/13.
  6. // Copyright © 2016年 FFIB. All rights reserved.
  7. //
  8. import UIKit
  9. import RxSwift
  10. import RxCocoa
  11. import RxDataSources
  12. protocol MessageViewControllerDelegate: class {
  13. func didSelect(item: MessageItem)
  14. }
  15. final class MessageViewController: UIViewController {
  16. // MARK: Storyboard property
  17. @IBOutlet var tableView: UITableView!
  18. var emptyView : UILabel = {
  19. let empty = UILabel(frame: CGRect(x: kScreenWidth / 2 - 50, y: 74, width: 50, height: 50))
  20. empty.isHidden = true
  21. empty.text = "当前没有任何消息"
  22. empty.textColor = UIColor.gray
  23. empty.font = UIFont.systemFont(ofSize: 14)
  24. empty.sizeToFit()
  25. return empty
  26. }()
  27. // MARK: data property
  28. var messageViewModel: MessageViewModel? = nil
  29. let disposeBag = DisposeBag()
  30. weak var delegate: MessageViewControllerDelegate?
  31. // MARK: parameter property
  32. var type = MessageType.zan {
  33. willSet {
  34. messageViewModel = MessageViewModel(type: newValue)
  35. }
  36. }
  37. // MARK: view function
  38. override func viewDidLoad() {
  39. super.viewDidLoad()
  40. configureRxDataSource()
  41. messageViewModel?.reload(isRefresh: true)
  42. view.addSubview(emptyView)
  43. }
  44. override func viewWillAppear(_ animated: Bool) {
  45. super.viewWillAppear(true)
  46. // titleWithbackBar = messageViewModel?.messageType.model.title ?? ""
  47. navigationItem.setRightBars(buttonSpace: 0,
  48. images: [UIImage(named: "更多-右上角-1")],
  49. actions: [#selector(clearMessages)],
  50. target: self)
  51. }
  52. var dataSource: RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>> {
  53. return RxTableViewSectionedAnimatedDataSource<AnimatableSectionModel<Int, MessageItem>>(configureCell: { (dataSource, tableView, indexPath, item) in
  54. switch self.type {
  55. case .system:
  56. let cell = tableView.dequeueReusableCell(withIdentifier: "messageCell", for: indexPath) as! MessageCell
  57. cell.setInfo(item)
  58. return cell
  59. case .comment, .zan:
  60. let cell = tableView.dequeueReusableCell(withIdentifier: "commentCell", for: indexPath) as! CommentCell
  61. cell.setInfo(item, type: self.type)
  62. return cell
  63. }
  64. }, canEditRowAtIndexPath: { _, _ in true })
  65. }
  66. func configureRxDataSource() {
  67. messageViewModel?.hasData
  68. .bind(to: emptyView.rx.isHidden)
  69. .disposed(by: disposeBag)
  70. messageViewModel?.messageContents
  71. .bind(to: tableView.rx.items(dataSource: dataSource))
  72. .disposed(by: disposeBag)
  73. tableView.rx.modelDeleted(MessageItem.self)
  74. .subscribe(onNext: { [unowned self] in self.messageViewModel?.remove($0)})
  75. .disposed(by: disposeBag)
  76. tableView.rx.modelSelected(MessageItem.self)
  77. .subscribe(onNext: { [unowned self] in self.delegate?.didSelect(item: $0) })
  78. .disposed(by: disposeBag)
  79. tableView.rx.willDisplayCell
  80. .subscribe({ [unowned self] in self.messageViewModel?.preload(indexPath: $0.element?.indexPath)})
  81. .disposed(by: disposeBag)
  82. }
  83. // MARK: button function
  84. @objc func clearMessages() {
  85. let alert = FFAlertController(title: "", message: "", alertStyle: .actionSheet)
  86. alert.addAlertAction(alertAction: DestructiveAlertAction(title: "清空消息", handler: { (alertAction) in
  87. self.messageViewModel?.removeAll()
  88. }))
  89. alert.addAlertAction(alertAction: FFAlertAction(title: "取消", handler: nil))
  90. presentController(alert)
  91. }
  92. }