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类结构图


具体使用
默认的下拉刷新 - 01
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
//或
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 马上进入刷新状态
[self.tableView.header beginRefreshing];
[
下拉动画刷新 - 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;
[
下拉隐藏的属性
// 隐藏时间
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下载地址中查看
给出的这些应该足够平时的开发,希望多多给建议
原文链接:http://www.jianshu.com/p/e1a40f46aed7
著作权归作者所有,转载请联系作者获得授权,并标注“简书作者”。
iOS刷新第三方MJRefresh的基本使用的更多相关文章
- iOS微信第三方登录实现
iOS微信第三方登录实现 一.接入微信第三方登录准备工作.移动应用微信登录是基于OAuth2.0协议标准构建的微信OAuth2.0授权登录系统.在进行微信OAuth2.0授权登录接入之前,在微信开 ...
- [iOS]数据库第三方框架FMDB详细讲解
[iOS]数据库第三方框架FMDB详细讲解 初识FMDB iOS中原生的SQLite API在进行数据存储的时候,需要使用C语言中的函数,操作比较麻烦.于是,就出现了一系列将SQLite API进行封 ...
- iOS:详解MJRefresh刷新加载更多数据的第三方库
原文链接:http://www.ios122.com/2015/08/mjrefresh/ 简介 MJRefresh这个第三方库是李明杰老师的杰作,这个框架帮助我们程序员减轻了超级多的麻烦,节约了开发 ...
- iOS中第三方框架刷新
0.先加入主头文件 #import "MJRefresh.h" 1.添加下拉刷新 MJRefreshHeaderView *header = [MJRefreshHeaderVie ...
- iOS开发使用MJRefresh进行刷新
1.将MJRefresh下载后,拖进项目 MJRefresh地址: https://github.com/CoderMJLee/MJRefresh 2.添加头文件 #import "MJRe ...
- iOS常用第三方开源框架和优秀开发者博客等
博客收藏iOS开发过程好的开源框架.开源项目.Xcode工具插件.Mac软件.文章等,会不断更新维护,希望对你们有帮助.如果有推荐或者建议,请到此处提交推荐或者联系我. 该文档已提交GitHub,点击 ...
- iOS 常用第三方类库、完整APP示例
一.第三方类库 1:基于响应式编程思想的oc地址:https://github.com/ReactiveCocoa/ReactiveCocoa2:hud提示框地址:https://github.com ...
- iOS常用第三方框架大全
常用第三方 今天就给大家总结一下,我们在项目中用到最多的第三方,免去了大家花时间去搜索,在这里大家进行了全面的总结. 1. 编程框架 1:基于响应式编程思想的oc 地址:https://github. ...
- ios开发--第三方整理
一:第三方插件 1:基于响应式编程思想的oc 地址:https://github.com/ReactiveCocoa/ReactiveCocoa 2:hud提示框 地址:https://github. ...
随机推荐
- Backbone.js学习之View
千呼万唤始出来,终于到最后一个要点View了.照旧,先来一睹官方文档: Backbone views are almost more convention than they are code - t ...
- Linux vi入门必备
一.vi.vim介绍 文本编辑器分为: (1)基于图形界面,如gedit.geany等: (2)基于命令行,如nano.vi.joe等: 每个命令行界面的文本编辑器都有各自不同的快捷键,比如nan ...
- 【转载】看懂SqlServer查询计划
看懂SqlServer查询计划 阅读目录 开始 SQL Server 查找记录的方法 SQL Server Join 方式 更具体执行过程 索引统计信息:查询计划的选择依据 优化视图查询 推荐阅读-M ...
- POJ1064
#include <iostream> #include <iomanip> #include <cmath> using namespace std; int N ...
- Js判断CSS文件加载完毕的实例教程
要判断这个 CSS 文件是否加载完毕,各个浏览器的做法差异比较大,这次要说IE浏览器做的不错,我们可以直接通过onload方法来处理CSS加载完成以后的处理: 代码如下 复制代码 // 代码节选至se ...
- 【原创】如何找到Oracle中哪条记录被锁
通常有这种情况,某个表或者准确的说是表的某条记录被锁(TX锁),在业务层面排查之余,一般都会想知道是哪条记录被锁,每次被锁的是否是同一条记录?还是每次都不同?通过记录可以找到这条记录可以在哪个模块.哪 ...
- SSH项目中,解决中文请求参数乱码,Filter过滤器不起作用的问题
1.web.xml配置如下(必须放在Struts2配置之前) <!-- 字符编码过滤器配置--> <filter> <filter-name>CharEncodin ...
- hdu 1686 Oulipo KMP匹配次数统计
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1686 分析:典型的KMP算法,统计字符串匹配的次数. 用Next数组压缩时间复杂度,要做一些修改. / ...
- android ListView的怪异现象
我们已经知道,当条目没显示一次,那个类重写的最后一个函数就执行一次,但是现在,发生了怪异现象!当窗体的属性设置为包裹的时候,会重复显示多次,所以,高度,宽度都要设置为充满类型才可以
- THREE.js代码备份——线框cube、按键、鼠标控制
<!DOCTYPE html> <html lang="en"> <head> <title>three.js canvas - g ...