// 代码地址: https://github.com/CoderMJLee/MJRefresh // 代码地址: 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 // UIScrollView+MJRefresh.m // MJRefreshExample // // Created by MJ Lee on 15/3/4. // Copyright (c) 2015年 小码哥. All rights reserved. // #import "UIScrollView+MJRefresh.h" #import "MJRefreshHeader.h" #import "MJRefreshFooter.h" #import @implementation NSObject (MJRefresh) + (void)exchangeInstanceMethod1:(SEL)method1 method2:(SEL)method2 { method_exchangeImplementations(class_getInstanceMethod(self, method1), class_getInstanceMethod(self, method2)); } + (void)exchangeClassMethod1:(SEL)method1 method2:(SEL)method2 { method_exchangeImplementations(class_getClassMethod(self, method1), class_getClassMethod(self, method2)); } @end @implementation UIScrollView (MJRefresh) #pragma mark - header static const char MJRefreshHeaderKey = '\0'; - (void)setHeader:(MJRefreshHeader *)header { if (header != self.header) { // 删除旧的,添加新的 [self.header removeFromSuperview]; [self addSubview:header]; // 存储新的 [self willChangeValueForKey:@"header"]; // KVO objc_setAssociatedObject(self, &MJRefreshHeaderKey, header, OBJC_ASSOCIATION_ASSIGN); [self didChangeValueForKey:@"header"]; // KVO } } - (MJRefreshHeader *)header { return objc_getAssociatedObject(self, &MJRefreshHeaderKey); } #pragma mark - footer static const char MJRefreshFooterKey = '\0'; - (void)setFooter:(MJRefreshFooter *)footer { if (footer != self.footer) { // 删除旧的,添加新的 [self.footer removeFromSuperview]; [self addSubview:footer]; // 存储新的 [self willChangeValueForKey:@"footer"]; // KVO objc_setAssociatedObject(self, &MJRefreshFooterKey, footer, OBJC_ASSOCIATION_ASSIGN); [self didChangeValueForKey:@"footer"]; // KVO } } - (MJRefreshFooter *)footer { return objc_getAssociatedObject(self, &MJRefreshFooterKey); } #pragma mark - other - (NSInteger)totalDataCount { NSInteger totalCount = 0; if ([self isKindOfClass:[UITableView class]]) { UITableView *tableView = (UITableView *)self; for (NSInteger section = 0; section