iOS 第三方框架-MJRefresh的基本使用

iOS开发中最好用的上下拉刷新第三方框架 MJRefresh

GitHub : https://github.com/CoderMJLee/MJRefresh


UIRefreshControl的介绍

1.UIRefresh是苹果自带的刷新控件

2.支持iOS6.0之后的版本

3.一旦被分配到一个UITableViewController,控件的框架是自动管理


UIRefreshControl基本使用

// 刷新中得状态判断,只读属性,根据状态可做一些自定义的事情
@property (nonatomic, readonly, getter=isRefreshing) BOOL refreshing;

//实例化对象(里面有init,UIRefreshControl的初始化)
 UIRefreshControl *control = [[UIRefreshControl alloc] init];

 //设置UIRefreshControl控件的颜色(菊花和文字)
 control.tintColor = [UIColor redColor];

 //添加到tableView中,默认尺寸和位置都已经设置好
 [self.tableView addSubview:control];

 // 下拉刷新文字描述,自定义
 @property (nonatomic, retain) NSAttributedString *attributedTitle

// 开始刷新
- (void)beginRefreshing NS_AVAILABLE_IOS(6_0);

// 结束刷新,在确定获得想要的加载数据之后调用
- (void)endRefreshing NS_AVAILABLE_IOS(6_0);

MJRefresh的介绍

MJRefresh是继承于UIView的自定义刷新控件

支持哪些控件的刷新?

UIScrollView、UITableView、UICollectionView、UIWebView

从iOS9之后,用MJRefresh框架的时候使用它的属性和方法,大部分需要加入mj_ 开头作为前缀

该框架纯ARC,兼容的系统>=iOS6.0、iPhone\iPad横竖屏


如果使用MJRefresh

  • cocoapods导入:pod ‘MJRefresh’ (cocoapods另一篇博客里面有写)

  • 手动导入:将MJRefresh文件夹中的所有文件拽入项目中

导入主头文件:#import “MJRefresh.h”

#主要是实现上拉刷新和下拉刷新
    //下拉刷新
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self 
                                                refreshingAction:@selector(loadNewTopic)];

    //自动更改透明度
    self.tableView.mj_header.automaticallyChangeAlpha = YES;

    //进入刷新状态
    [self.tableView.mj_header beginRefreshing];

    //上拉刷新
    self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self 
                                refreshingAction:@selector(loadMoreTopic)];
    //结束头部刷新
    [weakSelf.tableView.mj_header endRefreshing];

 //结束尾部刷新
    [weakSelf.tableView.mj_footer endRefreshing];

MJRefresh类结构图

image


具体使用

默认的下拉刷新 - 01

    self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 进入刷新状态后会自动调用这个block
    }];
    //或
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self 
                        refreshingAction:@selector(loadNewData)];

    // 马上进入刷新状态
    [self.tableView.header beginRefreshing];

下拉刷新01-普通:

image


下拉动画刷新 - 02

        // 刷新控件的状态
        typedef NS_ENUM(NSInteger, MJRefreshState) {
        /** 普通闲置状态 */
        MJRefreshStateIdle = 1,
        /** 松开就可以进行刷新的状态 */
        MJRefreshStatePulling,
        /** 正在刷新中的状态 */
        MJRefreshStateRefreshing,
        /** 即将刷新的状态 */
        MJRefreshStateWillRefresh,
        /** 所有数据加载完毕,没有更多的数据了 */
        MJRefreshStateNoMoreData
    };

    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self 
            refreshingAction:@selector(loadNewData)];
    // 设置普通状态的动画图片 (idleImages 是图片)
    [header setImages:idleImages forState:MJRefreshStateIdle];
    // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
    [header setImages:pullingImages forState:MJRefreshStatePulling];
    // 设置正在刷新状态的动画图片
    [header setImages:refreshingImages forState:MJRefreshStateRefreshing];
    // 设置header
    self.tableView.mj_header = header;

下拉刷新02-动画图片:

image

下拉隐藏的属性

// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
header.stateLabel.hidden = YES;

自定义的文字和动画图片的设置

#使用上拉刷新和下拉刷新一般都是自定义头部和尾部的类
例如: 头部刷新的  
@interface JHHeader : MJRefreshNormalHeader

#在.m文件中设置
/** 初始化设置 */
- (void)prepare
{
    [super prepare];
    //创建UIImageView
    UIImageView *logoView = [[UIImageView alloc] init];
    //添加图片
    logoView.image = [UIImage imageNamed:@"meinv02"];
    //将该UIImageView添加到当前header中
    [self addSubview:logoView];
    self.logoView = logoView;

    //根据拖拽的情况自动切换透明度
    self.automaticallyChangeAlpha = YES;

    //隐藏时间
    self.lastUpdatedTimeLabel.hidden = YES;

    //设置文字颜色
    self.stateLabel.textColor = [UIColor redColor];
}
/**
 *  摆放子控件
 */

- (void)placeSubviews
{
    [super placeSubviews];

    self.logoView.x = 0;
    self.logoView.width = self.width;
    self.logoView.height = 100;
    self.logoView.y =  -self.logoView.height; 
}

自定义尾部刷新

例:创建一个JHFooter类 继承于MJRefreshAutoNormalFooter
@interface JHFooter : MJRefreshAutoNormalFooter

#在.m文件中设置
/**  初始化 */
- (void)prepare
{
    [super prepare];

    self.stateLabel.textColor = [UIColor grayColor];
    [self setTitle:@"向上拉加载更多内容喔..." forState:MJRefreshStateIdle];
    [self setTitle:@"正在连接网络加载中...." forState:MJRefreshStateRefreshing];

    UISwitch *swith = [[UISwitch alloc] init];
    [self addSubview:swith];

    UIImageView *logoView = [[UIImageView alloc] init];
    logoView.image = [UIImage imageNamed:@"meinv02"];
    [self addSubview:logoView];
    self.logoView = logoView;
}

/**
 *  摆放子控件
 */
- (void)placeSubviews
{
    [super placeSubviews];

    self.logoView.x = 0;
    self.logoView.y = self.height;
    self.logoView.width = self.width;
    self.logoView.height = 100;
}

大部分参考自MJRefresh 的 README.md

该框架还有很多强大的功能,详情可以进入最上面给的github下载地址中查看

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值