MessageListController.swift 5.5 KB

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