UIScrollView+MJRefresh.m 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // 代码地址: https://github.com/CoderMJLee/MJRefresh
  2. // UIScrollView+MJRefresh.m
  3. // MJRefresh
  4. //
  5. // Created by MJ Lee on 15/3/4.
  6. // Copyright (c) 2015年 小码哥. All rights reserved.
  7. //
  8. #import "UIScrollView+MJRefresh.h"
  9. #import "MJRefreshHeader.h"
  10. #import "MJRefreshFooter.h"
  11. #import "MJRefreshTrailer.h"
  12. #import <objc/runtime.h>
  13. @implementation UIScrollView (MJRefresh)
  14. #pragma mark - header
  15. static const char MJRefreshHeaderKey = '\0';
  16. - (void)setMj_header:(MJRefreshHeader *)mj_header
  17. {
  18. if (mj_header != self.mj_header) {
  19. // 删除旧的,添加新的
  20. [self.mj_header removeFromSuperview];
  21. if (mj_header) {
  22. [self insertSubview:mj_header atIndex:0];
  23. }
  24. // 存储新的
  25. objc_setAssociatedObject(self, &MJRefreshHeaderKey,
  26. mj_header, OBJC_ASSOCIATION_RETAIN);
  27. }
  28. }
  29. - (MJRefreshHeader *)mj_header
  30. {
  31. return objc_getAssociatedObject(self, &MJRefreshHeaderKey);
  32. }
  33. #pragma mark - footer
  34. static const char MJRefreshFooterKey = '\0';
  35. - (void)setMj_footer:(MJRefreshFooter *)mj_footer
  36. {
  37. if (mj_footer != self.mj_footer) {
  38. // 删除旧的,添加新的
  39. [self.mj_footer removeFromSuperview];
  40. if (mj_footer) {
  41. [self insertSubview:mj_footer atIndex:0];
  42. }
  43. // 存储新的
  44. objc_setAssociatedObject(self, &MJRefreshFooterKey,
  45. mj_footer, OBJC_ASSOCIATION_RETAIN);
  46. }
  47. }
  48. - (MJRefreshFooter *)mj_footer
  49. {
  50. return objc_getAssociatedObject(self, &MJRefreshFooterKey);
  51. }
  52. #pragma mark - footer
  53. static const char MJRefreshTrailerKey = '\0';
  54. - (void)setMj_trailer:(MJRefreshTrailer *)mj_trailer {
  55. if (mj_trailer != self.mj_trailer) {
  56. // 删除旧的,添加新的
  57. [self.mj_trailer removeFromSuperview];
  58. if (mj_trailer) {
  59. [self insertSubview:mj_trailer atIndex:0];
  60. }
  61. // 存储新的
  62. objc_setAssociatedObject(self, &MJRefreshTrailerKey,
  63. mj_trailer, OBJC_ASSOCIATION_RETAIN);
  64. }
  65. }
  66. - (MJRefreshTrailer *)mj_trailer {
  67. return objc_getAssociatedObject(self, &MJRefreshTrailerKey);
  68. }
  69. #pragma mark - 过期
  70. - (void)setFooter:(MJRefreshFooter *)footer
  71. {
  72. self.mj_footer = footer;
  73. }
  74. - (MJRefreshFooter *)footer
  75. {
  76. return self.mj_footer;
  77. }
  78. - (void)setHeader:(MJRefreshHeader *)header
  79. {
  80. self.mj_header = header;
  81. }
  82. - (MJRefreshHeader *)header
  83. {
  84. return self.mj_header;
  85. }
  86. #pragma mark - other
  87. - (NSInteger)mj_totalDataCount
  88. {
  89. NSInteger totalCount = 0;
  90. if ([self isKindOfClass:[UITableView class]]) {
  91. UITableView *tableView = (UITableView *)self;
  92. for (NSInteger section = 0; section < tableView.numberOfSections; section++) {
  93. totalCount += [tableView numberOfRowsInSection:section];
  94. }
  95. } else if ([self isKindOfClass:[UICollectionView class]]) {
  96. UICollectionView *collectionView = (UICollectionView *)self;
  97. for (NSInteger section = 0; section < collectionView.numberOfSections; section++) {
  98. totalCount += [collectionView numberOfItemsInSection:section];
  99. }
  100. }
  101. return totalCount;
  102. }
  103. @end