PersonViewUserAndOtherListView.swift 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183
  1. //
  2. // PersonViewUserAndOtherListView.swift
  3. // RainbowPlanet
  4. //
  5. // Created by 南鑫林 on 2019/6/17.
  6. // Copyright © 2019 RainbowPlanet. All rights reserved.
  7. //
  8. import UIKit
  9. import SwiftyMediator
  10. class PersonViewUserAndOtherListView: BaseView {
  11. deinit {
  12. listViewDidScrollCallback = nil
  13. if observe != nil {
  14. NotificationCenter.default.removeObserver(observe!)
  15. }
  16. }
  17. weak var observe : NSObjectProtocol?
  18. var listViewDidScrollCallback: ((UIScrollView) -> ())?
  19. var jumpModeType : JumpModeType? {
  20. didSet {
  21. collectionView.snp_makeConstraints { (make) in
  22. make.top.right.left.equalToSuperview()
  23. if jumpModeType == JumpModeType.none {
  24. make.height.equalTo(kScreenHeight-kNavBarTotalHeight-kTabBarTotalHeight-44)
  25. }else {
  26. make.height.equalTo(kScreenHeight-kNavBarTotalHeight-kSafeTabBarHeight-44)
  27. }
  28. }
  29. }
  30. }
  31. /// 用户Id
  32. var uid:Int?
  33. /// 发布,收藏,分享类型
  34. var personalCenterVCType : Int?
  35. /// 模型数组
  36. var postMyModels = Array<PostMyModel>()
  37. override func setupViews() {
  38. addSubview(collectionView)
  39. }
  40. override func setupData() {
  41. collectionView.addHeader(withBeginRefresh: true, animation: false, refreshBlock: { [weak self] (page) in
  42. self?.communityPostMyApi(page: page)
  43. })
  44. collectionView.addFooter(withAutomaticallyRefresh: false) {
  45. [weak self] (page) in
  46. self?.communityPostMyApi(page: page)
  47. }
  48. let emptyView = DIYEmptyView.empty(withImageStr: nil, titleStr: nil, detailStr: "暂无内容")
  49. emptyView?.contentViewY = kScaleValue(value: 35)
  50. emptyView?.subViewMargin = 20
  51. collectionView.ly_emptyView = emptyView
  52. collectionView.ly_startLoading()
  53. observe = NotificationCenter.default.addObserver(forName: NSNotification.Name("communityDeletePostApi"), object: nil, queue: OperationQueue.main) { [weak self] (notification) in
  54. let postId = notification.object as? Int
  55. if !(self?.postMyModels.isEmpty ?? true) {
  56. for (index,postMyModel) in (self?.postMyModels)!.enumerated() {
  57. if postMyModel.id == postId {
  58. self?.postMyModels.remove(at: index)
  59. }
  60. }
  61. self?.collectionView.reloadData()
  62. }
  63. }
  64. }
  65. lazy var collectionView: UICollectionView = {
  66. let collectionView = UICollectionView.init(frame: CGRect.zero, collectionViewLayout: collectionViewLayout)
  67. collectionView.backgroundColor = kf7f8faColor
  68. collectionView.delegate = self;
  69. collectionView.dataSource = self;
  70. collectionView.showsVerticalScrollIndicator = false
  71. collectionView.showsHorizontalScrollIndicator = false
  72. return collectionView
  73. }()
  74. private lazy var collectionViewLayout: UICollectionViewFlowLayout = {
  75. let collectionViewLayout = UICollectionViewFlowLayout.init()
  76. collectionViewLayout.minimumLineSpacing = 1
  77. collectionViewLayout.minimumInteritemSpacing = 1
  78. return collectionViewLayout
  79. }()
  80. }
  81. extension PersonViewUserAndOtherListView {
  82. func communityPostMyApi(page:Int) {
  83. var type : CommunityPostMyType!
  84. if personalCenterVCType == 0 {
  85. type = .create
  86. }
  87. if personalCenterVCType == 1 {
  88. type = .collect
  89. }
  90. if personalCenterVCType == 2 {
  91. type = .share
  92. }
  93. SwiftMoyaNetWorkServiceCommunity.shared().communityPostMyApi(type: type,uid:uid ?? 0,page:page) {
  94. [weak self] (communityPostMyModel) -> (Void) in
  95. let communityPostMyModel = communityPostMyModel as? CommunityPostMyModel
  96. if communityPostMyModel?.pagination?.currentPage ?? 1 <= communityPostMyModel?.pagination?.totalPages ?? 1 {
  97. if communityPostMyModel?.pagination?.currentPage == 1{
  98. self?.postMyModels.removeAll()
  99. self?.collectionView.resetNoMoreData()
  100. }
  101. self?.postMyModels = (self?.postMyModels)! + (communityPostMyModel?.data!)!
  102. self?.collectionView.reloadData()
  103. if self?.postMyModels.count ?? 0 >= communityPostMyModel?.pagination?.total ?? 0 {
  104. self?.collectionView.endFooterNoMoreData()
  105. }
  106. }else {
  107. self?.collectionView.endFooterNoMoreData()
  108. }
  109. }
  110. }
  111. }
  112. extension PersonViewUserAndOtherListView: UICollectionViewDelegateFlowLayout,UICollectionViewDataSource {
  113. func numberOfSections(in collectionView: UICollectionView) -> Int {
  114. return 1
  115. }
  116. func collectionView(_ collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
  117. return postMyModels.isEmpty ? 0 : postMyModels.count
  118. }
  119. func collectionView(_ collectionView: UICollectionView, cellForItemAt indexPath: IndexPath) -> UICollectionViewCell {
  120. let cell = PersonViewUserAndOtherListCollectionViewCell.cellWith(collectionView: collectionView, indexPath: indexPath)
  121. cell.uid = self.uid
  122. cell.type = self.personalCenterVCType
  123. cell.postMyModel = postMyModels[indexPath.row]
  124. return cell
  125. }
  126. func collectionView(_ collectionView: UICollectionView, didSelectItemAt indexPath: IndexPath) {
  127. let postMyModel = postMyModels[indexPath.row]
  128. if PostType(rawValue: postMyModel.type ?? "video") == .video {
  129. Mediator.push(CommunityRouterModuleType.pushPostDetailVoide(postId: "\(postMyModel.id ?? 0)", departType: .personal))
  130. }else {
  131. let vc = CommunityRecommendController()
  132. vc.id = postMyModel.id ?? 0
  133. findViewController().navigationController?.pushViewController(vc, animated: true)
  134. }
  135. }
  136. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, sizeForItemAt indexPath: IndexPath) -> CGSize {
  137. return CGSize(width:(kScreenWidth-4)/3, height:(kScreenWidth-4)/3)
  138. }
  139. func collectionView(_ collectionView: UICollectionView, layout collectionViewLayout: UICollectionViewLayout, insetForSectionAt section: Int) -> UIEdgeInsets {
  140. return UIEdgeInsets(top:1, left: 1, bottom: 10, right: 1)
  141. }
  142. public func scrollViewDidScroll(_ scrollView: UIScrollView) {
  143. self.listViewDidScrollCallback?(scrollView)
  144. }
  145. }
  146. extension PersonViewUserAndOtherListView: JXPagingViewListViewDelegate {
  147. public func listView() -> UIView {
  148. return self
  149. }
  150. public func listViewDidScrollCallback(callback: @escaping (UIScrollView) -> ()) {
  151. self.listViewDidScrollCallback = callback
  152. }
  153. public func listScrollView() -> UIScrollView {
  154. return self.collectionView
  155. }
  156. }