// // MessageCommentController.swift // RainbowPlanet // // Created by Christopher on 2019/6/11. // Copyright © 2019 RainbowPlanet. All rights reserved. // import UIKit /// 消息列表类型 /// /// - comment: 评论 /// - praise: 赞 /// - follow: 关注 enum MessageListVCType { case comment case praise case follow } class MessageListController: BaseViewController { var messageShowTypes : String = "" var cellHeightsDictionary = Dictionary() var messageDataModels = Array() var messageVCType : MessageListVCType? override func viewDidLoad() { super.viewDidLoad() setupViews() setupData() } override func setupViews() { switch messageVCType { case .comment?: navigationBar.title = "评论与@" break case .praise?: navigationBar.title = "赞与互动" break case .follow?: navigationBar.title = "关注通知" break default: break } view.backgroundColor = kf7f8faColor view.addSubview(tableView) DIYEmptyView.emptyTableView(tableView: tableView) } override func setupData() { tableView.addHeaderWithHeader(withBeginRefresh: true, animation: false) { [weak self] (page) in self?.userMemberMessageList(page: page) } tableView.addFooterWithWithHeader(withAutomaticallyRefresh: false) { [weak self] (page) in self?.userMemberMessageList(page: page) } } lazy var tableView: UITableView = { let tableView = UITableView(frame: CGRect(x: 0, y: kNavBarTotalHeight, width: kScreenWidth, height: kScreenHeight-kNavBarTotalHeight), style: UITableView.Style.grouped) tableView.separatorStyle = .none tableView.backgroundColor = kf7f8faColor tableView.dataSource = self tableView.delegate = self return tableView }() } extension MessageListController { /// 用户消息列表 /// /// - Parameter page: 分页 func userMemberMessageList(page:Int) { SwiftMoyaNetWorkServiceUser.shared().userMemberMessageListApi(messageShowTypes: self.messageShowTypes, page: page) { [weak self] (messageListModel) -> (Void) in let messageListModel = messageListModel as? MessageListModel if messageListModel?.pagination?.currentPage ?? 1 <= messageListModel?.pagination?.totalPages ?? 1 { if messageListModel?.pagination?.currentPage == 1{ self?.messageDataModels.removeAll() } self?.messageDataModels = (self?.messageDataModels)! + (messageListModel?.data!)! self?.tableView.reloadData() if self?.messageDataModels.count ?? 0 >= messageListModel?.pagination?.total ?? 0 { self?.tableView.isHiddenFooter(true) } }else { self?.tableView.endFooterNoMoreData() } } } } // MARK: - tableView dataSource && delegate extension MessageListController: UITableViewDataSource, UITableViewDelegate { func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int { return messageDataModels.isEmpty ? 0 : messageDataModels.count } func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell { let cell = MessageListTableCell.cellWith(tableView: tableView, indexPath: indexPath) cell.messageDataModel = messageDataModels[indexPath.row] return cell } func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) { let messageDataModel = messageDataModels[indexPath.row] switch messageVCType { case .comment?: break case .praise?: break case .follow?: if messageDataModel.param?.uid != UserModel.shared().getModel()?.uid { let vc = OtherPersonalCenterViewController() vc.uid = messageDataModel.param?.uid ?? 0 self.navigationController?.pushViewController(vc, animated: true) } break default: break } } func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat { return UITableView.automaticDimension } func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) { cellHeightsDictionary.updateValue(cell.frame.size.height, forKey: indexPath) } func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { let height = cellHeightsDictionary[indexPath] if let height = height { return height as! CGFloat } return UITableView.automaticDimension } func tableView(_ tableView: UITableView, heightForHeaderInSection section: Int) -> CGFloat { return 10 } func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? { let view = UIView() view.backgroundColor = kf7f8faColor return view } func tableView(_ tableView: UITableView, heightForFooterInSection section: Int) -> CGFloat { return 0 } func tableView(_ tableView: UITableView, viewForFooterInSection section: Int) -> UIView? { return nil } }