当前位置:   article > 正文

MJRefresh源码阅读_mjrefreshstatenomoredata

mjrefreshstatenomoredata

本文对应的MJRefresh版本是3.1.12

使用

MJRefresh的使用很简单,引入MJRefresh.h头文件,然后创建header或者footer赋值给tableView或者collectionView的mj_header或者mj_footer属性。设置好block或者target-action的回调就可以了。

接口也非常简单,如果没有特殊要求,提供的默认的样式已经很好了。同时MJRefresh内置的几个header和footer可以定制不同的样式,如果还不能满足需求,还可以自己写header和footer。

作者GitHub上的示例代码:

  // 下拉刷新
    tableView.mj_header= [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [tableView.mj_header endRefreshing];
        });
    }];


  // 上拉刷新
    tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        // 模拟延迟加载数据,因此2秒后才调用(真实开发中,可以移除这段gcd代码)
        dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
            // 结束刷新
            [tableView.mj_footer endRefreshing];
        });
    }];
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18

原理

  1. 通过OC的runtime,在Category中给UIScrollView增加属性,mj_header和mj_footer。
  2. mj_header和mj_footer使用KVO观察UIScrollView的contentOffset属性,根据属性的值判断上拉和下拉的状态。
  3. mj_header和mj_footer的子类负责具体的显示样式和对上拉下拉状态的响应。

源码阅读

主要类图:
这里写图片描述

从引入的头文件开始,MJRefresh.h中又包含了好几个头文件,用途分为3种类型:
第一种是辅助类型的文件:

#import "UIScrollView+MJExtension.h"
#import "UIView+MJExtension.h”
  • 1
  • 2

MJExtension的分类都是View上的辅助方法,为了写代码好看用的。比如UIScrollView(MJExtension)中的mj_offsetX属性,getter和setter方法是这样的:

- (CGFloat)mj_offsetX{
    return self.contentOffset.x;
}

- (void)setMj_offsetY:(CGFloat)mj_offsetY{
    CGPoint offset = self.contentOffset;
    offset.y = mj_offsetY;
    self.contentOffset = offset;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

所以这部分代码可以略过不看。

第二种是MJRefresh提供的header和footer

#import "MJRefreshNormalHeader.h"
#import "MJRefreshGifHeader.h"
#import "MJRefreshBackNormalFooter.h"
...
  • 1
  • 2
  • 3
  • 4

第三种是UIScrollView的MJRefresh分类。

#import "UIScrollView+MJRefresh.h”
  • 1

这个是阅读代码的入口。

UIScrollView的mj_header和mj_footer属性</
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/442680
推荐阅读
相关标签
  

闽ICP备14008679号