UICollectionView+Ext.swift 2.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. //
  2. // UICollectionView+Ext.swift
  3. // PQCreativeCommunity
  4. //
  5. // Created by SanW on 2021/8/4.
  6. // Copyright © 2021 BytesFlow. All rights reserved.
  7. //
  8. import Foundation
  9. import MJRefresh
  10. extension UICollectionView{
  11. /// 获取当前cell
  12. /// - Returns: <#description#>
  13. func visibleCell() -> UICollectionViewCell? {
  14. let visibleRect = CGRect(origin: contentOffset, size: bounds.size)
  15. let visiblePoint = CGPoint(x: visibleRect.midX, y: visibleRect.midY)
  16. guard let visibleIndexPath = indexPathForItem(at: visiblePoint) else { return nil }
  17. return cellForItem(at: visibleIndexPath)
  18. }
  19. /// 添加刷新组件
  20. /// - Parameters:
  21. /// - scroller: <#scroller description#>
  22. /// - type: 1-头部跟尾部 2-头部 3-尾部
  23. public func addRefreshView(type: REFRESH_TYPE = .REFRESH_TYPE_ALL, refreshHandle: ((_ isHeader: Bool) -> Void)?) {
  24. if type == .REFRESH_TYPE_ALL || type == .REFRESH_TYPE_HEADER {
  25. let header = MJRefreshNormalHeader.init {
  26. if refreshHandle != nil {
  27. refreshHandle!(true)
  28. }
  29. }
  30. header.setTitle("下拉刷新", for: .willRefresh)
  31. header.setTitle("正在刷新...", for: .refreshing)
  32. header.setTitle("松开刷新", for: .pulling)
  33. header.setTitle("下拉刷新", for: .idle)
  34. header.lastUpdatedTimeLabel?.isHidden = true
  35. mj_header = header
  36. }
  37. if type == .REFRESH_TYPE_ALL || type == .REFRESH_TYPE_FOOTER {
  38. // MJRefreshBackNormalFooter 不会附在上面
  39. // MJRefreshAutoFooter 不会便宜
  40. let footer = MJRefreshBackNormalFooter.init {
  41. if refreshHandle != nil {
  42. refreshHandle!(false)
  43. }
  44. }
  45. footer.setTitle("暂时没有更多了", for: .noMoreData)
  46. footer.setTitle("精彩内容正在加载中...", for: .refreshing)
  47. mj_footer = footer
  48. }
  49. if type == .REFRESH_TYPE_AUTOFOOTER {
  50. let footer = MJRefreshAutoNormalFooter.init {
  51. if refreshHandle != nil {
  52. refreshHandle!(false)
  53. }
  54. }
  55. footer.triggerAutomaticallyRefreshPercent = -70
  56. footer.setTitle("暂时没有更多了", for: .noMoreData)
  57. footer.setTitle("精彩内容正在加载中...", for: .refreshing)
  58. mj_footer = footer
  59. }
  60. }
  61. func indexPathsForElements(in rect: CGRect) -> [IndexPath] {
  62. let allLayoutAttributes = collectionViewLayout.layoutAttributesForElements(in: rect)!
  63. return allLayoutAttributes.map { $0.indexPath }
  64. }
  65. }