文档章节

MJRefresh的使用

easy_qingsong
 easy_qingsong
发布于 2016/06/28 12:03
字数 928
阅读 52
收藏 0

 

如何使用MJRefresh

1、CocoaPods    pod 'MJRefresh'

2、将所有文件MJRefres文件夹拖到项目中  然后引入  #import "MJRefresh.h"

 

常用的方法和类文件

1、下拉刷新

1》基础的下拉刷新 MJRefreshNormalHeader

2》gif样式的下拉刷新   MJRefreshGifHeader

然后自动上拉刷新     分别:MJRefreshAutoNormalFooter Gif:MJRefreshAutoGifFooter

这些细节的刷新  均继承MJRefreshComponent  在这样的父类文件下有我们常用的方法

- (void)beginRefreshing;
- (void)endRefreshing; 
- (BOOL)isRefreshing;

/** 刷新控件的状态 */

typedef NS_ENUM(NSInteger, MJRefreshState) {

    /** 普通闲置状态 */

    MJRefreshStateIdle = 1,

    /** 松开就可以进行刷新的状态 */

    MJRefreshStatePulling,

    /** 正在刷新中的状态 */

    MJRefreshStateRefreshing,

    /** 即将刷新的状态 */

    MJRefreshStateWillRefresh,

    /** 所有数据加载完毕,没有更多的数据了 */

    MJRefreshStateNoMoreData

};

例子

1、常规的下拉

 __unsafe_unretained __typeof(self) weakSelf = self;

    // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)

    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{

        [weakSelf loadNewData];

    }];

    // 马上进入刷新状态

    [self.tableView.mj_header beginRefreshing];

 

 

 

2、动画加载

MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

for (NSUInteger i = 1; i<=60; i++) {

        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];

        [idleImages addObject:image];

    }

[header setImages:idleImages forState:MJRefreshStateIdle];

  // 设置即将刷新状态的动画图片(一松开就会刷新的状态)

    NSMutableArray *refreshingImages = [NSMutableArray array];

    for (NSUInteger i = 1; i<=3; i++) {

        UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];

        [refreshingImages addObject:image];

    }

[header setImages:refreshingImages forState:MJRefreshStatePulling];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];

self.tableView.mj_header = header;

 

3、UITableView + 下拉刷新 隐藏时间  隐藏状态的设置

   // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)

    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

    

    // 设置自动切换透明度(在导航栏下面自动隐藏)

    header.automaticallyChangeAlpha = YES;

    

    // 隐藏时间

    header.lastUpdatedTimeLabel.hidden = YES;

    

   // 隐藏状态

    header.stateLabel.hidden = YES;

    // 马上进入刷新状态

    [header beginRefreshing];

    

    // 设置header

4、自定义文字

 // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)

    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

    

    // 设置文字

    [header setTitle:@"Pull down to refresh" forState:MJRefreshStateIdle];

    [header setTitle:@"Release to refresh" forState:MJRefreshStatePulling];

    [header setTitle:@"Loading ..." forState:MJRefreshStateRefreshing];

    

    // 设置字体

    header.stateLabel.font = [UIFont systemFontOfSize:15];

    header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:14];

 

    // 设置颜色

    header.stateLabel.textColor = [UIColor redColor];

    header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];

    

    // 马上进入刷新状态

    [header beginRefreshing];

    

    // 设置刷新控件

    self.tableView.mj_header = header;

5、自定义刷新控件  参考MJDIYHeader

self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

上拉刷新和下拉刷新类似

1、常规的设置

 // 设置回调(一旦进入刷新状态就会调用这个refreshingBlock)

    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{

        [weakSelf loadMoreData];

    }];

 

2、UITableView + 上拉刷新 自定义文字

 // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)

    MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];

    

    // 设置文字

    [footer setTitle:@"Click or drag up to refresh" forState:MJRefreshStateIdle];

    [footer setTitle:@"Loading more ..." forState:MJRefreshStateRefreshing];

    [footer setTitle:@"No more data" forState:MJRefreshStateNoMoreData];

 

    // 设置字体

    footer.stateLabel.font = [UIFont systemFontOfSize:17];

 

    // 设置颜色

    footer.stateLabel.textColor = [UIColor blueColor];

 

 // 禁止自动加载

    footer.automaticallyRefresh = NO;

    

    // 设置footer

    self.tableView.mj_footer = footer;

 

3、 UITableView + 上拉刷新 加载后隐藏

// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadOnceData方法)

    self.tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadOnceData)];

- (void)loadOnceData

{

    // 1.添加假数据

    for (int i = 0; i<5; i++) {

        [self.data addObject:MJRandomData];

    }

    

    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        // 刷新表格

        [self.tableView reloadData];

        

        // 隐藏当前的上拉刷新控件

        self.tableView.mj_footer.hidden = YES;

    });

}

 

3、加载最后一份数据

#pragma mark 加载最后一份数据

- (void)loadLastData

{

    // 1.添加假数据

    for (int i = 0; i<5; i++) {

        [self.data addObject:MJRandomData];

    }

    

    // 2.模拟2秒后刷新表格UI(真实开发中,可以移除这段gcd代码)

    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(MJDuration * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

        // 刷新表格

        [self.tableView reloadData];

        

        // 拿到当前的上拉刷新控件,变为没有更多数据的状态

        [self.tableView.mj_footer endRefreshingWithNoMoreData];

    });

}

 

详见:https://github.com/CoderMJLee/MJRefresh

© 著作权归作者所有

easy_qingsong
粉丝 0
博文 4
码字总数 1223
作品 0
程序员
私信 提问

暂无文章

只需一步,在Spring Boot中统一Restful API返回值格式与统一处理异常

统一返回值 在前后端分离大行其道的今天,有一个统一的返回值格式不仅能使我们的接口看起来更漂亮,而且还可以使前端可以统一处理很多东西,避免很多问题的产生。 比较通用的返回值格式如下:...

晓月寒丶
昨天
59
0
区块链应用到供应链上的好处和实际案例

区块链可以解决供应链中的很多问题,例如记录以及追踪产品。那么使用区块链应用到各产品供应链上到底有什么好处?猎头悬赏平台解优人才网小编给大家做个简单的分享: 使用区块链的最突出的优...

猎头悬赏平台
昨天
28
0
全世界到底有多少软件开发人员?

埃文斯数据公司(Evans Data Corporation) 2019 最新的统计数据(原文)显示,2018 年全球共有 2300 万软件开发人员,预计到 2019 年底这个数字将达到 2640万,到 2023 年达到 2770万。 而来自...

红薯
昨天
65
0
Go 语言基础—— 通道(channel)

通过通信来共享内存(Java是通过共享内存来通信的) 定义 func service() string {time.Sleep(time.Millisecond * 50)return "Done"}func AsyncService() chan string {retCh := mak......

刘一草
昨天
58
0
Apache Flink 零基础入门(一):基础概念解析

Apache Flink 的定义、架构及原理 Apache Flink 是一个分布式大数据处理引擎,可对有限数据流和无限数据流进行有状态或无状态的计算,能够部署在各种集群环境,对各种规模大小的数据进行快速...

Vincent-Duan
昨天
60
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部