上下拉刷新控件MJRefresh

一、类结构

MJRefreshComponent.h

MJRefreshHeader.h

MJRefreshFooter.h

MJRefreshAutoFooter.h

导入
  • cocoapods导入:pod 'MJRefresh'

    手动导入:

    将MJRefresh文件夹中的所有文件拽入项目中

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

  • MJRefreshComponent.h

/** 刷新控件的基类 */
@interface MJRefreshComponent : UIView
#pragma mark - 刷新状态控制
/** 进入刷新状态 */
- (void)beginRefreshing;
/** 结束刷新状态 */
- (void)endRefreshing;
/** 是否正在刷新 */
- (BOOL)isRefreshing; #pragma mark - 其它
/** 根据拖拽比例自动切换透明度 */
@property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
@end
  • MJRefreshHeader.h
@interface MJRefreshHeader : MJRefreshComponent
/** 创建 header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 创建 header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; /** 这个 key 用来存储上一次下拉刷新成功的时间 */
@property (copy, nonatomic) NSString *lastUpdatedTimeKey;
/** 上一次下拉刷新成功的时间 */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedTime; /** 忽略多少 scrollView 的 contentInset 的顶部 */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
@end
  • MJRefreshFooter.h
@interface MJRefreshFooter : MJRefreshComponent
/** 创建 footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
/** 创建 footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action; /** 提示没有更多的数据 */
- (void)noticeNoMoreData;
/** 重置没有更多的数据(消除没有更多数据的状态) */
- (void)resetNoMoreData; /** 忽略多少 scrollView 的 contentInset 的底部*/
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom; /** 自动根据有无数据来显示和隐藏 */
@property (assign, nonatomic) BOOL automaticallyHidden;
@end
  • MJRefreshAutoFooter.h
@interface MJRefreshAutoFooter : MJRefreshFooter
/** 是否自动刷新(默认为 YES) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh; /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh;
@end

三、例子:下拉刷新

  • 设置刷新
//1.block方式使用
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
// 2.设置回调方式使用(一旦进入刷新状态,就调用 target 的 action,也就是调用 self 的 loadNewData 方法)
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 3.手动进入刷新状态
[self.tableView.mj_header beginRefreshing]; // 4.手动结束刷新状态
[self.tableView.mj_header endRefreshing];
  • 设置动画图片
// 设置回调(一旦进入刷新状态,就调用 targett 的 action,即调用 self 的 loadNewData 方法)
//注意:这里的动画是帧动画,所以要设置三个图片的帧动画
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; UIImage *image1=[UIImage imageNamed:@"cellmorebtnclick.png"];
UIImage *image2=[UIImage imageNamed:@"cellmorebtnnormal.png"];
UIImage *image3=[UIImage imageNamed:@"imageBackground.png"];
// 设置普通状态的动画图片
NSArray *idleImages = @[image1,image2,image3];
[header setImages:idleImages forState:MJRefreshStateIdle]; // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
NSArray *pullingImages = @[image1,image2,image3];
[header setImages:pullingImages forState:MJRefreshStatePulling]; // 设置正在刷新状态的动画图片
NSArray *refreshingImages = @[image1,image2,image3];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置 header
self.tableView.mj_header = header;

  • 下拉刷新-隐藏各种状态
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES; // 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES; // 隐藏状态
header.stateLabel.hidden = YES;
  • 下拉刷新-自定义文字
// 设置文字
[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];
  • 下拉刷新-自定义刷新控件
self.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 具体实现参考 MJDIYHeader.h 和 MJDIYHeader.m

参考:http://www.jianshu.com/p/59e4d2359fdb

ios--->上下拉刷新控件MJRefresh的更多相关文章

  1. iOS:下拉刷新控件UIRefreshControl的详解

    下拉刷新控件:UIRefreshControl 1.具体类信息: @interface UIRefreshControl : UIControl //继承控制类 - (instancetype)ini ...

  2. android官方下拉刷新控件SwipeRefreshLayout的使用

    可能开发安卓的人大多数都用过很多下拉刷新的开源组件,但是今天用了官方v4支持包的SwipeRefreshLayout觉得效果也蛮不错的,特拿出来分享. 简介:SwipeRefreshLayout组件只 ...

  3. Android仿苹果版QQ下拉刷新实现(一) ——打造简单平滑的通用下拉刷新控件

    前言: 忙完了结婚乐APP的开发,终于可以花一定的时间放在博客上了.好了,废话不多说,今天我们要带来的效果是苹果版本的QQ下拉刷新.首先看一下目标效果以及demo效果:      因为此效果实现的步骤 ...

  4. [Android]下拉刷新控件RefreshableView的实现

    以下内容为原创,欢迎转载,转载请注明 来自天天博客:http://www.cnblogs.com/tiantianbyconan/p/4172483.html 需求:自定义一个ViewGroup,实现 ...

  5. android SwipeRefreshLayout google官方下拉刷新控件

    下拉刷新功能之前一直使用的是XlistView很方便我前面的博客有介绍 SwipeRefreshLayout是google官方推出的下拉刷新控件使用方法也比较简单 今天就来使用下SwipeRefres ...

  6. Android PullToRefresh下拉刷新控件的简单使用

    PullToRefresh这个开源库早就听说了,不过一直没用过.作为一个经典的的开源库,我觉得还是有必要认识一下. 打开github上的网址:https://github.com/chrisbanes ...

  7. Android SwipeRefreshLayout 官方下拉刷新控件介绍

    转载请标明出处:http://blog.csdn.net/lmj623565791/article/details/24521483 下面App基本都有下拉刷新的功能,以前基本都使用XListView ...

  8. Google SwipeRefreshLayout(Goolge官方下拉刷新控件)尝鲜

    前天Google官方终于出了Android刷新控件——SwipeRefreshLayout. 使用前先需要将android.support.v4.jar升级到19.1.升级后,可能会出现SDK版本与A ...

  9. 上拉加载下拉刷新控件WaterRefreshLoadMoreView

    上拉加载下拉刷新控件WaterRefreshLoadMoreView 效果: 源码: // // SRSlimeView // @author SR // Modified by JunHan on ...

随机推荐

  1. C++Review2_代码复用

    C++的一个重要目的是实现代码重用. 有哪些机制可以实现这个目标呢? 1.公有继承——is a的关系 2.包含 (新的类包含另一个类的对象)——has a的关系 3.私有继承/保护继承——has a的 ...

  2. C语言图形界面常用函数集锦

    (以下函数均应在图形方式初始之后使用(initgraph(a,b)),在win-tc中使用BGI图形程序模板时,其中已经定义有一个initgr函数,在main函数中应在执行initgr函数之后再使用这 ...

  3. 从头学pytorch(三) 线性回归

    关于什么是线性回归,不多做介绍了.可以参考我以前的博客https://www.cnblogs.com/sdu20112013/p/10186516.html 实现线性回归 分为以下几个部分: 生成数据 ...

  4. Excel快速填充

    利用单元格右下角填充句柄进行填充 然后选择快速填充 利用数据面板的快速填充功能(ctrl+e) 年月日三列不能同时填充 只能够一列一列的填充 类别取第一列 级别取第二列 但是由于第一个的编号有两个“1 ...

  5. 泛圈科技Yottachain区块链云存储打破传统云迎来价值数据存储

    随着物联网时代的发展,更多的数据随之产生.从智能设备到电脑再到视频游戏机,各种各样的信息从不同的电子产品源源不断地涌入.通常,人们将数据存储在本地驱动器中.但是,由于产生的数据量是无限的,超过了本地存 ...

  6. 【题解】P4585 [FJOI2015]火星商店问题(线段树套Trie树)

    [题解]P4585 [FJOI2015]火星商店问题(线段树套Trie树) 语文没学好不要写省选题面!!!! 题目大意: 有\(n\)个集合,每个集合有个任意时刻都可用的初始元素.现在有\(m\)个操 ...

  7. html页脚固定在底部的方法

    <style type="text/css"> html { height: 100%; } body { height: 100%; margin: 0; paddi ...

  8. 1059 C语言竞赛 (20 分)C语言

    C 语言竞赛是浙江大学计算机学院主持的一个欢乐的竞赛.既然竞赛主旨是为了好玩,颁奖规则也就制定得很滑稽: 0.冠军将赢得一份"神秘大奖"(比如很巨大的一本学生研究论文集--). 1 ...

  9. 小小知识点(三十)集中式大规模和无小区大规模MIMO

    集中式大规模MIMO 同一小区的所有接入点( access point,AP) 布置在同一个基站( base station,BS) 中,并且 AP 之间的间距非常小,这种布置方式称为集中式大规模MI ...

  10. Python for Data Analysis 学习心得(二) - pandas介绍

    一.pandas介绍 本篇程序上篇内容,在numpy下面继续介绍pandas,本书的作者是pandas的作者之一.pandas是非常好用的数据预处理工具,pandas下面有两个数据结构,分别为Seri ...