前言

MJRefresh是一个好用的上下拉刷新的控件,github地址如下:https://github.com/CoderMJLee/MJRefresh 很多app都使用这个控件,我们也来了解一下它的用法。下面主要是介绍在UITableView下的使用。

使用

在github上下载之后,将MJRefresh文件添加到项目中,并且在需要使用的文件上引入MJRefresh.h。然后在该文件的viewDidLoad方法中指定tableView的header和footer,如下:

#import "MJRefreshTableViewController.h"
#import "MJRefresh.h" @interface MJRefreshTableViewController ()
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end @implementation MJRefreshTableViewController - (void)viewDidLoad {
[super viewDidLoad]; __weak typeof(self) weakSelf = self;
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//刷新时候,需要执行的代码。一般是请求最新数据,请求成功之后,刷新列表
[weakSelf loadNewData];
}]; self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
//刷新时候,需要执行的代码。一般是请求更多数据,请求成功之后,刷新列表
[weakSelf loadNoreData];
}];
} /**
请求获取最新的数据
*/
- (void)loadNewData {
NSLog(@"请求获取最新的数据"); //这里假设2秒之后获取到了最新的数据,刷新tableview,并且结束刷新控件的刷新状态
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//刷新列表
[weakSelf.tableView reloadData];
//拿到当前的刷新控件,结束刷新状态
[weakSelf.tableView.mj_header endRefreshing];
});
} /**
请求获取更多的数据
*/
- (void)loadNoreData {
NSLog(@"请求获取更多的数据"); //这里假设2秒之后获取到了更多的数据,刷新tableview,并且结束刷新控件的刷新状态
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//刷新列表
[weakSelf.tableView reloadData];
//拿到当前的刷新控件,结束刷新状态
[weakSelf.tableView.mj_footer endRefreshing];
});
}
@end

按照app的实际情况来说,loadNoreData 和 loadNewData方法应该是发送数据请求,而结束刷新控件的刷新状态应该是在请求失败或者请求成功的方法中调用。

如果是带动图的刷新控件的话,就直接替换在viewDidLoad中的写法即可。

- (void)viewDidLoad {
[super viewDidLoad]; __weak typeof(self) weakSelf = self;
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)]; [header setImages:idleImages forState:MJRefreshStateIdle];
[header setImages:pullingImages forState:MJRefreshStatePulling];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing]; self.tableView.mj_header = header;
}

其中idleImages,pullingImages,refreshingImages是图片数组,分别对应普通闲置状态,松开就可以进行刷新的状态,正在刷新中的状态等的图片。注意,idleImages等图片数组存储的对象是UIImage。

如果只设置了refreshingImages,只要在刷新状态下显示图片,其他状态不显示图片。如果设置了idleImages或者pullingImages其中之一,所有状态下都显示设置的图片。
同理,设置底部带动画效果的footer:

- (void)viewDidLoad {
[super viewDidLoad]; MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(endRefreshing)]; [footer setImages:idleImages forState:MJRefreshStateIdle];
[footer setImages:pullingImages forState:MJRefreshStatePulling];
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing]; self.tableView.mj_footer = footer;
}

PO一张效果图:

 
header.stateLabel.hidden = YES;
header.lastUpdatedTimeLabel.hidden = YES;

如果隐藏右边状态或者更新时间其中一行文字,则显示的一行文字会垂直居中,效果如下:

如果把右边的两行文字都隐藏了,只显示图片,则图片居中,效果如下:

如果觉得动画频率过快或者过低,可以修改MJRefresh以下位置。

 
使用以下方法还可以修改显示文字
[header setTitle:@"下拉刷新" forState:MJRefreshStateIdle];
[header setTitle:@"释放开始刷新哦~" forState:MJRefreshStatePulling];
[header setTitle:@"正在快马加鞭地刷新着呢" forState:MJRefreshStateRefreshing];

其他控件的用法

UICollectionView 和UIScrollView的用法与UITableView的用法一致,只需将上面所说的tableView.mj_header 改成 collectionView.mj_header 和 scrollView.mj_header 即可。例如:

self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//刷新时候,需要执行的代码。一般是请求最新数据,请求成功之后,刷新列表
[weakSelf loadNewData];
}]; self.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//刷新时候,需要执行的代码。一般是请求最新数据,请求成功之后,刷新列表
[weakSelf loadNewData];
}];

又因UIWebView 自带一个UIScrollView的属性,所以UIWebView也可以使用MJRefresh,用法如下:

self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//刷新时候,需要执行的代码。一般是请求最新数据,请求成功之后,刷新列表
[weakSelf loadNewData];
}];

MJRefresh在UITableView中的使用的更多相关文章

  1. 在xib里,拖一个UIView到UITableView中作为tableHeaderView

    原贴地址:http://blog.csdn.net/haoxinqingb/article/details/41683881 内容 在xib里,拖一个UIView到UITableView中作为tabl ...

  2. UITableView中的headerView改变颜色

    UITableView中的headerView 默认颜色是灰色的 如果自定义headerView必须在headerview上加一个view作为添加的颜色 或者直接 -(UIView *)tableVi ...

  3. UITableView中复用cell显示信息错乱

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  4. 解决UITableView中Cell重用机制导致内容出错的方法总结

    UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件.上面主要是一个个的 UITableViewCell,可以让UITableViewCell响应一些点 ...

  5. UITableView中的visibleCells的用法(visibleCells帮上大忙了)

      这两天遇到一个问题,UITableView中需要加入动画,而且每一行的速度不一样. 刚开始做时把所有的cell都遍历一遍加上动画,后来发现,如果数据很多时,就会出现各种各样的问题,而且没有显示在界 ...

  6. iOS开发之UITableView中计时器的几种实现方式(NSTimer、DispatchSource、CADisplayLink)

    最近工作比较忙,但是还是出来更新博客了.今天博客中所涉及的内容并不复杂,都是一些平时常见的一些问题,通过这篇博客算是对UITableView中使用定时器的几种方式进行总结.本篇博客会给出在TableV ...

  7. UITableView中cell里的UITextField不被弹出键盘挡住

    UITableView中cell里的UITextField不被弹出键盘挡住 本人视频教程系类   iOS中CALayer的使用 效果如下: 源码: EditCell.h 与 EditCell.m // ...

  8. UITableView中cell点击的绚丽动画效果

    UITableView中cell点击的绚丽动画效果 本人视频教程系类   iOS中CALayer的使用 效果图: 源码: YouXianMingCell.h 与 YouXianMingCell.m / ...

  9. 如何获取UITableView中cell的frame值

    如何获取UITableView中cell的frame值 这个可以用来处理UITableView弹出键盘的问题 本人视频教程系类   iOS中CALayer的使用 效果: 源码: // // ViewC ...

随机推荐

  1. 获取IE浏览器关闭事件

    //关闭浏览器时才会触发此操作,刷新页面不执行 //n 检测鼠标相对于用户屏幕的水平位置 - 网页正文部分左:求出鼠标在当前窗口上的水平位置(参照:当前窗口右上角为0.0坐标) //m 网页正文全文宽 ...

  2. React Native 之 HelloWorld

    1. 切换目录 输入之前要切换到要保存的目录 2. 修改下载源 cd ~/ vim .npmrc 添加 registry = https://registry.npm.taobao.org 3. 在终 ...

  3. iOS 8 之 新特性

    1. 沙盒间共享数据 2. Metal 3D绘图,据说10倍速,替代了OpenGL 3. AppStore 可视频预览

  4. 1.3.1. 新建Xcode项目并设置故事板(Core Data 应用程序实践指南)

    创建名为Grocery Dude的Single View程序,并按默认设置处理,不勾选Core Date 和 Git. 设计故事板: 选择Main.Storyboard 拖放一个 Table View ...

  5. 2.13.2. 对结果集进行筛选(Core Data 应用程序实践指南)

    Core Data通过谓词(NSPredicate)来筛选,比如限定获取的数量等.谓词基本对存储区不敏感,但也有例外,比如:matches可用在 in-memory存储区,但是不能用在SQLite存储 ...

  6. MySQL主从同步校验与重新同步

    主从复制环境中,可能有种种原因导致主.从库数据不一致的情况,主从一致性也一直是DBA需要关注的问题,校验MySQL的主从一致性一般有多种工具,诸如MySQL自带的checksum.mysqldiff. ...

  7. iOS 登陆之界面设置

    1.界面构成 1.1. 效果图 1.2. 元素 背景图 用户名的输入框 密码的输入框 登陆按钮 忘记密码 用户注册 第三方登陆 两个分割线

  8. Spring mvc配置Json返回

    第一种 配置 <bean class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHand ...

  9. margin三个值

    http://www.cnblogs.com/wangkongming/p/3204734.html margin标记可以带一个.二个.三个.四个参数,各有不同的含义. margin: 20px;(上 ...

  10. 国内值得关注的官方API集合

    项目地址:https://github.com/marktony/Awesome_API 本页仅收集国内部分官方API,如需查看其他版本,请点击这里. 目录 笔记 出行 词典 电商 地图 电影 后端云 ...