MJRefresh的基本使用及简单封装

项目中一般都会用到上拉或者下拉刷新,平时用的最多的框架为MJRefresh,这个框架提供了一些简单的API,但初次接触的人难免束手束脚,不知如何下手。

本文主要讲讲MJRefresh的最基本使用方法及对代码进行简单封装

1.基本使用

MJRefresh提供了一个基于UIScrollview的分类,分类增加了mj_header和 mj_footer的属性,分别对应下拉刷新控件和上拉刷新控件,我们拿到tableView或collectionView的mj_header和mj_footer进行属性设置并开启刷新就行了

以下为实现代码:

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupRefresh];
}
- (void)setupRefresh {
    
    //创建一个下拉刷新控件 在开始刷新后会调用此block
    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        //加载数据(包括刷新tableView)
        [self loadNewTopics];
        //结束刷新
        [self.tableView.mj_header endRefreshing];
    }];
    
    //自动改变透明度 (当控件被导航条挡住后不显示)
    header.automaticallyChangeAlpha = YES;
    
    // 设置各种状态下的刷新文字
    [header setTitle:@"下拉可以刷新" forState:MJRefreshStateIdle];
    [header setTitle:@"松开立即刷新" forState:MJRefreshStatePulling];
    [header setTitle:@"正在刷新..." forState:MJRefreshStateRefreshing];
    
    // 设置字体
    header.stateLabel.font = [UIFont systemFontOfSize:13];
    header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:13];
    
    // 设置颜色
    header.stateLabel.textColor = [UIColor grayColor];
    header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
    
    //初始化时开始刷新
    [header beginRefreshing];
    
    self.tableView.mj_header = header;
}

2.简单封装

在一个程序中用到下拉刷新的地方很有可能不止一处,在实际使用的时候没有必要在每个控制器中都进行详细的设置,故新建一个继承MJRefreshNormalHeader的类,在类里面设置header或footer的相关属性,在调用的时候即可实现“一行代码解决下拉刷新”

以下为详细代码:(footer封装部分类似)

封装部分:
DGLRefreshHeader.h

DGLRefreshHeader.h
#import 

@interface DGLRefreshHeader : MJRefreshNormalHeader

@end

DGLRefreshHeader.m

DGLRefreshHeader.m

#import "DGLRefreshHeader.h"

@implementation DGLRefreshHeader

- (instancetype)init {
    
    self = [super init];
    if (self) {
        
        //自动改变透明度 (当控件被导航条挡住后不显示)                   
        self.automaticallyChangeAlpha = YES;
        
        // 设置各种状态下的刷新文字
        [self setTitle:@"下拉可以刷新" forState:MJRefreshStateIdle];
        [self setTitle:@"松开立即刷新" forState:MJRefreshStatePulling];
        [self setTitle:@"正在刷新..." forState:MJRefreshStateRefreshing];
        
        
        // 设置字体
        self.stateLabel.font = [UIFont systemFontOfSize:13];
        self.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:13];
        
        // 设置颜色
        self.stateLabel.textColor = [UIColor grayColor];
        self.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
        
        //初始化时开始刷新
        [self beginRefreshing];
        
    }
    return self;
}

@end

代码实现部分viewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    [self setupRefresh];
}
- (void)setupRefresh {
    
    //下拉刷新 在开始刷新后会调用此block
    self.tableView.mj_header = [DGLRefreshHeader headerWithRefreshingBlock:^{
        //加载数据(包括刷新tableView)
        [self loadNewTopics];
        //结束刷新
        [self.tableView.mj_header endRefreshing];
    }];
    
    //上拉刷新 在开始刷新后会调用此block
    self.tableView.mj_footer = [DGLRefreshFooter footerWithRefreshingBlock:^{
        [self loadMoreTopics];
        [self.tableView.mj_footer endRefreshing];
    }];
}

由此可见封装过后减少了许多重复代码

你可能感兴趣的:(MJRefresh的基本使用及简单封装)