UIScrollView+MJRefresh.m 3.2 KB

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