- The easiest way to use pull-to-refresh
- 用法最简单的下拉刷新框架:一行代码搞定
UIScrollView
、UITableView
、UICollectionView
、UIWebView
- cocoapods导入:
pod 'MJRefresh'
- 手动导入:
- 将
MJRefreshExample/MJRefreshExample/MJRefresh
文件夹中的所有文件拽入项目中
- 导入主头文件:
#import "MJRefresh.h"
MJRefresh.bundle
MJRefresh.h
MJRefreshComponent.h MJRefreshComponent.m
MJRefreshConst.h MJRefreshConst.m
MJRefreshFooter.h MJRefreshFooter.m
MJRefreshGifFooter.h MJRefreshGifFooter.m
MJRefreshGifHeader.h MJRefreshGifHeader.m
MJRefreshHeader.h MJRefreshHeader.m
MJRefreshLegendFooter.h MJRefreshLegendFooter.m
MJRefreshLegendHeader.h MJRefreshLegendHeader.m
UIScrollView+MJExtension.h UIScrollView+MJExtension.m
UIScrollView+MJRefresh.h UIScrollView+MJRefresh.m
UIView+MJExtension.h UIView+MJExtension.m
![(App03)](https://camo.githubusercontent.com/c0571d252baf68dadf19dbdb14c36c76ca3de3f4bad46ab484d78a473c92e704/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530342f3039313533353433393436363731382e706e67)
* 由于这个框架的功能较多,就不写具体文字描述其用法
* 大家可以直接参考示例中的MJTableViewController和MJCollectionViewController,更为直观快速
![(下拉刷新01-传统)](https://camo.githubusercontent.com/61bb3722f991731db04a9a7c29064206ba81cb18361377e41c0e6a7b620e446f/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383431353339323335332e676966)
// 添加传统的下拉刷新
[self.tableView addLegendHeaderWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
或
// 添加传统的下拉刷新
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
[self.tableView addLegendHeaderWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 马上进入刷新状态
[self.tableView.header beginRefreshing];
![(下拉刷新02-动画图片)](https://camo.githubusercontent.com/07817e41ba5557a7d2f63efdfd8e61c52d7fd93038189860c7107737c6ca435a/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383437313830323334322e676966)
// 添加动画图片的下拉刷新
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
[self.tableView addGifHeaderWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 设置普通状态的动画图片
[self.tableView.gifHeader setImages:idleImages forState:MJRefreshHeaderStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[self.tableView.gifHeader setImages:pullingImages forState:MJRefreshHeaderStatePulling];
// 设置正在刷新状态的动画图片
[self.tableView.gifHeader setImages:refreshingImages forState:MJRefreshHeaderStateRefreshing];
![(下拉刷新03-隐藏时间)](https://camo.githubusercontent.com/89d06243100b868de1ef390bfb943b23811269cefaf1fcae95f2da78783f97fe/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383532343737383736302e676966)
// 隐藏时间
self.tableView.header.updatedTimeHidden = YES;
![(下拉刷新04-隐藏状态和时间01)](https://camo.githubusercontent.com/90c96c8525053a1a8473ad41f7068022833dccac7daf27d11bd7cfdca51f89ca/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383537363032343839332e676966)
// 隐藏时间
self.tableView.header.updatedTimeHidden = YES;
// 隐藏状态
self.tableView.header.stateHidden = YES;
![(下拉刷新05-隐藏状态和时间02)](https://camo.githubusercontent.com/56458b3d95dcf90dd26b8d6f8e3a8aca3630575c9b32f68a10671b2e6b87d192/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035393033303836353036392e676966)
![(下拉刷新06-自定义文字)](https://camo.githubusercontent.com/057f24a8f88a3f01e78ef9d80cde168b4e319eee0e9d432df95de45ca38963c7/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3038313031343235343631333137392e676966)
// 设置文字
[self.tableView.header setTitle:@"Pull down to refresh" forState:MJRefreshHeaderStateIdle];
[self.tableView.header setTitle:@"Release to refresh" forState:MJRefreshHeaderStatePulling];
[self.tableView.header setTitle:@"Loading ..." forState:MJRefreshHeaderStateRefreshing];
// 设置字体
self.tableView.header.font = [UIFont systemFontOfSize:15];
// 设置颜色
self.tableView.header.textColor = [UIColor redColor];
![(上拉刷新01-传统)](https://camo.githubusercontent.com/7f261d043efa0a6dcce8617a74f0d98e5e8c07e824d20f7917c79811b90628d1/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313130313437323734353336312e676966)
// 添加传统的上拉刷新
[self.tableView addLegendFooterWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
或
// 添加传统的上拉刷新
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
[self.tableView addLegendFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
![(上拉刷新02-动画图片)](https://camo.githubusercontent.com/58933bc0bccdc283f61102c2b304eb3113a5e727b76814b9311d81c7d89eeb25/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035363337323734333938382e676966)
// 添加动画图片的上拉刷新
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
[self.tableView addGifFooterWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置正在刷新状态的动画图片
self.tableView.gifFooter.refreshingImages = refreshingImages;
![(上拉刷新03-隐藏状态01)](https://camo.githubusercontent.com/7b0c9fdcc0327e591543540267f6e78264c7c4a3b9f0bc010d16283d64b84c9b/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313130323032383336353531372e676966)
// 隐藏状态
self.tableView.footer.stateHidden = YES;
![(上拉刷新04-隐藏状态02)](https://camo.githubusercontent.com/fba43ffbbdfc0683a1164e551bbb3dfb3043c6cc6db6f86cdb7a7450873412f6/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383039333532353038352e676966)
![(上拉刷新05-全部加载完毕)](https://camo.githubusercontent.com/4157f8cd3fa34afd4deaaad6ce61472c5c67a0c34e73f585e9c246757af966d3/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383137323131373432302e676966)
// 变为没有更多数据的状态
[self.tableView.footer noticeNoMoreData];
![(上拉刷新06-禁止自动加载)](https://camo.githubusercontent.com/feb68f6ea7f7b9aacaf62e09fe24761d6c13e1ad7783ebe78ea564966fa6d477/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383233373131393533392e676966)
// 禁止自动加载
self.tableView.footer.automaticallyRefresh = NO;
![(上拉刷新07-自定义文字)](https://camo.githubusercontent.com/cdf98349304baef85aa63f8d22ec3e371e68435d8bbdeaf7931249ff489640b8/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3038313031343339353535323631382e676966)
// 设置文字
[self.tableView.footer setTitle:@"Click or drag up to refresh" forState:MJRefreshFooterStateIdle];
[self.tableView.footer setTitle:@"Loading more ..." forState:MJRefreshFooterStateRefreshing];
[self.tableView.footer setTitle:@"No more data" forState:MJRefreshFooterStateNoMoreData];
// 设置字体
self.tableView.footer.font = [UIFont systemFontOfSize:17];
// 设置颜色
self.tableView.footer.textColor = [UIColor blueColor];
![(上拉刷新08-加载后隐藏)](https://camo.githubusercontent.com/77da5040a6621d3d2678449531c91948e4e9972c9b77a95831deb72ae6e0423e/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313035383336303339353430362e676966)
// 隐藏当前的上拉刷新控件
self.tableView.footer.hidden = YES;
![(UICollectionView01-上下拉刷新)](https://camo.githubusercontent.com/963457475f6ec9fb80ff137b786dedd355f8e6bad4c07a122d1265579c19fe7f/687474703a2f2f696d616765732e636e6974626c6f672e636f6d2f626c6f67323031352f3439373237392f3230313530332f3036313130333238323839373232332e676966)
// 添加传统的下拉刷新
[self.collectionView addLegendHeaderWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
// 添加传统的上拉刷新
[self.collectionView addLegendFooterWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
![(UIWebView01-下拉刷新)](https://camo.githubusercontent.com/c096ca581f05492eecf89d24d04ae03ba415e98704051e6db484c709a16c8bbc/687474703a2f2f7777312e73696e61696d672e636e2f6d77313032342f38303063646639636a77316571327a6a7a7537386e67323038773066793471702e676966)
// 添加下拉刷新控件
[self.webView.scrollView addLegendHeaderWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
- 本框架纯ARC,兼容的系统>=iOS6.0、iPhone\iPad横竖屏
- 如果在使用过程中遇到BUG,希望你能Issues我,谢谢(或者尝试下载最新的框架代码看看BUG修复没有)
- 如果在使用过程中发现功能不够用,希望你能Issues我,我非常想为这个框架增加更多好用的功能,谢谢
- 如果你想为MJRefresh输出代码,请拼命Pull Requests我
- 一起携手打造天朝乃至世界最好用的刷新框架,做天朝程序员的骄傲
- 如果你开发的应用中用到了MJRefresh,希望你能到CocoaControls添加你应用的iTunes路径,我将会安装使用你的应用,并且根据众多应用的使用情况,对MJRefresh进行一个更好的设计和完善,提供更多好用的功能,谢谢
- 步骤01(微信是举个例子,百度“你的应用名称 itunes”)
![(step01)](https://camo.githubusercontent.com/cadeb811e21de1413be38242a21000d9369839256420786da88247f86dc3d517/687474703a2f2f7777342e73696e61696d672e636e2f6d77313032342f3830306364663963747731657130766969763572736a3230736d3065613431742e6a7067)
- 步骤02
![(step02)](https://camo.githubusercontent.com/6e07b2758f52143b75bb0ed1e5cf2e136670107d04cf2cb48bca574721361928/687474703a2f2f7777322e73696e61696d672e636e2f6d77313032342f383030636466396374773165713076696c656a786c6a32307475306d653761302e6a7067)
- 步骤03
![(step03)](https://camo.githubusercontent.com/2ca35138bdfbb2d30a813769e604ba2d98a22946fe89083d1ac09a8d4ac9e966/687474703a2f2f7777312e73696e61696d672e636e2f6d77313032342f383030636466396374773165713076696f63706f356a3230776330646330756e2e6a7067)
- 步骤04
![(step04)](https://camo.githubusercontent.com/ff04859175cb2b8406cd13c8a9ea98ca91ee45cae322870874511ee7c445166f/687474703a2f2f7777332e73696e61696d672e636e2f6d77313032342f3830306364663963747731657130766972313337786a323073693067657767752e6a7067)