MessageListController.swift 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174
  1. //
  2. // MessageCommentController.swift
  3. // RainbowPlanet
  4. //
  5. // Created by Christopher on 2019/6/11.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftyMediator
  10. /// 消息列表类型
  11. ///
  12. /// - comment: 评论
  13. /// - praise: 赞
  14. /// - follow: 关注
  15. enum MessageListVCType {
  16. case comment
  17. case praise
  18. case follow
  19. }
  20. class MessageListController: BaseViewController {
  21. var messageShowTypes : String = ""
  22. var cellHeightsDictionary = Dictionary<IndexPath, Any>()
  23. var messageDataModels = Array<MessageDataModel>()
  24. var messageVCType : MessageListVCType?
  25. override func viewDidLoad() {
  26. super.viewDidLoad()
  27. setupViews()
  28. setupData()
  29. }
  30. override func setupViews() {
  31. switch messageVCType {
  32. case .comment?:
  33. navigationBar.title = "评论与@"
  34. break
  35. case .praise?:
  36. navigationBar.title = "赞与互动"
  37. break
  38. case .follow?:
  39. navigationBar.title = "关注通知"
  40. break
  41. default:
  42. break
  43. }
  44. view.backgroundColor = kf7f8faColor
  45. view.addSubview(tableView)
  46. DIYEmptyView.emptyTableView(tableView: tableView)
  47. }
  48. override func setupData() {
  49. tableView.addHeaderWithHeader(withBeginRefresh: true, animation: false) {
  50. [weak self] (page) in
  51. self?.userMemberMessageList(page: page)
  52. }
  53. tableView.addFooterWithWithHeader(withAutomaticallyRefresh: false) {
  54. [weak self] (page) in
  55. self?.userMemberMessageList(page: page)
  56. }
  57. }
  58. lazy var tableView: UITableView = {
  59. let tableView = UITableView(frame: CGRect(x: 0, y: kNavBarTotalHeight, width: kScreenWidth, height: kScreenHeight-kNavBarTotalHeight), style: UITableView.Style.grouped)
  60. tableView.separatorStyle = .none
  61. tableView.backgroundColor = kf7f8faColor
  62. tableView.dataSource = self
  63. tableView.delegate = self
  64. return tableView
  65. }()
  66. }
  67. extension MessageListController {
  68. /// 用户消息列表
  69. ///
  70. /// - Parameter page: 分页
  71. func userMemberMessageList(page:Int) {
  72. SwiftMoyaNetWorkServiceUser.shared().userMemberMessageListApi(messageShowTypes: self.messageShowTypes, page: page) {
  73. [weak self] (messageListModel) -> (Void) in
  74. let messageListModel = messageListModel as? MessageListModel
  75. if messageListModel?.pagination?.currentPage ?? 1 <= messageListModel?.pagination?.totalPages ?? 1 {
  76. if messageListModel?.pagination?.currentPage == 1{
  77. self?.messageDataModels.removeAll()
  78. self?.tableView.resetNoMoreData()
  79. }
  80. self?.messageDataModels = (self?.messageDataModels)! + (messageListModel?.data!)!
  81. self?.tableView.reloadData()
  82. if self?.messageDataModels.count ?? 0 >= messageListModel?.pagination?.total ?? 0 {
  83. self?.tableView.endFooterNoMoreData()
  84. }
  85. }else {
  86. self?.tableView.endFooterNoMoreData()
  87. }
  88. }
  89. }
  90. }
  91. // MARK: - tableView dataSource && delegate
  92. extension MessageListController: UITableViewDataSource, UITableViewDelegate {
  93. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  94. return messageDataModels.isEmpty ? 0 : messageDataModels.count
  95. }
  96. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  97. let cell = MessageListTableCell.cellWith(tableView: tableView, indexPath: indexPath)
  98. cell.messageDataModel = messageDataModels[indexPath.row]
  99. return cell
  100. }
  101. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  102. let messageDataModel = messageDataModels[indexPath.row]
  103. switch messageVCType {
  104. case .comment?,.praise?:
  105. if messageDataModel.param?.postTypeEnum == .video {
  106. Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(messageDataModel.param?.postId ?? 0)", departType: .others))
  107. }else {
  108. Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(messageDataModel.param?.postId ?? 0)"))
  109. }
  110. break
  111. case .follow?:
  112. if messageDataModel.param?.uid != UserModel.shared().getModel()?.uid {
  113. let vc = OtherPersonalCenterViewController()
  114. vc.uid = messageDataModel.param?.uid ?? 0
  115. self.navigationController?.pushViewController(vc, animated: true)
  116. }
  117. break
  118. default:
  119. break
  120. }
  121. }
  122. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  123. return UITableView.automaticDimension
  124. }
  125. func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
  126. cellHeightsDictionary.updateValue(cell.frame.size.height, forKey: indexPath)
  127. }
  128. func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
  129. let height = cellHeightsDictionary[indexPath]
  130. if let height = height {
  131. return height as! CGFloat
  132. }
  133. return UITableView.automaticDimension
  134. }
  135. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  136. return 10
  137. }
  138. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  139. let view = UIView()
  140. view.backgroundColor = kf7f8faColor
  141. return view
  142. }
  143. func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  144. return 0
  145. }
  146. func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
  147. return nil
  148. }
  149. }