MessageListController.swift 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191
  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. view.insertSubview(navigationBar, aboveSubview: (tableView))
  47. }
  48. override func setupData() {
  49. tableView.addHeader(withBeginRefresh: true, animation: true) {
  50. [weak self] (page) in
  51. self?.userMemberMessageList(page: page)
  52. }
  53. tableView.addAutoNormalFooter(withAutomaticallyRefresh: true, loadMoreBlock: {
  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, completion: {
  73. [weak self] (messageListModel) -> (Void) in
  74. switch self?.messageVCType {
  75. case .comment?,.praise?:
  76. DIYEmptyView.emptyNoDataTableView(tableView: self?.tableView,imageStr: .nine,detailStr: .nine)
  77. break
  78. case .follow?:
  79. DIYEmptyView.emptyNoDataActionTableView(tableView: self?.tableView, imageStr: .seven, detailStr: .seven, btnTitleStr: .four, btnClickBlock: {
  80. let pickVc = PublishViewController()
  81. let nav = BaseNavigationViewController.init(rootViewController: pickVc)
  82. self?.tabBarController?.present(nav, animated: true, completion: {
  83. self?.navigationController?.popToRootViewController(animated: false)
  84. })
  85. })
  86. break
  87. default:
  88. break
  89. }
  90. let messageListModel = messageListModel as? MessageListModel
  91. if messageListModel?.pagination?.currentPage == 1{
  92. self?.messageDataModels.removeAll()
  93. self?.tableView.resetNoMoreData()
  94. }
  95. self?.messageDataModels = (self?.messageDataModels)! + (messageListModel?.data!)!
  96. self?.tableView.reloadData()
  97. MJRefreshManager.mjRefreshManagerPaginationNoHiddenFooter(tableView: self?.tableView, pagination:messageListModel?.pagination)
  98. }) {
  99. [weak self] (loadingStatus) in
  100. MJRefreshManager.mjRefreshManagerLoadingStatus(tableView: self?.tableView,loadingStatus: loadingStatus)
  101. }
  102. }
  103. }
  104. // MARK: - tableView dataSource && delegate
  105. extension MessageListController: UITableViewDataSource, UITableViewDelegate {
  106. func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
  107. return messageDataModels.isEmpty ? 0 : messageDataModels.count
  108. }
  109. func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell {
  110. let cell = MessageListTableCell.cellWith(tableView: tableView, indexPath: indexPath)
  111. cell.messageDataModel = messageDataModels[indexPath.row]
  112. return cell
  113. }
  114. func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
  115. let messageDataModel = messageDataModels[indexPath.row]
  116. switch messageVCType {
  117. case .comment?,.praise?:
  118. if messageDataModel.param?.postTypeEnum == .video {
  119. Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(messageDataModel.param?.postId ?? 0)", departType: .others, topicId: 0))
  120. }else {
  121. Mediator.push(CommunityRouterModuleType.pushPostDetailContent(postId: "\(messageDataModel.param?.postId ?? 0)"))
  122. }
  123. break
  124. case .follow?:
  125. if messageDataModel.param?.uid != UserModel.shared().getModel()?.uid {
  126. let vc = OtherPersonalCenterViewController()
  127. vc.uid = messageDataModel.param?.uid ?? 0
  128. self.navigationController?.pushViewController(vc, animated: true)
  129. }
  130. break
  131. default:
  132. break
  133. }
  134. }
  135. func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  136. return UITableView.automaticDimension
  137. }
  138. func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
  139. cellHeightsDictionary.updateValue(cell.frame.size.height, forKey: indexPath)
  140. }
  141. func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat {
  142. let height = cellHeightsDictionary[indexPath]
  143. if let height = height {
  144. return height as! CGFloat
  145. }
  146. return UITableView.automaticDimension
  147. }
  148. func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat {
  149. return 10
  150. }
  151. func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
  152. let view = UIView()
  153. view.backgroundColor = kf7f8faColor
  154. return view
  155. }
  156. func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat {
  157. return 0
  158. }
  159. func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? {
  160. return nil
  161. }
  162. }