MJRefresh在没有数据时关闭上拉如何刷新表格数据怎么做?有这个功能吗

MJRefreshHeader.h
@interface MJRefreshHeader : MJRefreshComponent
/** 创建header */
+ (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingB
/** 创建header */
+ (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)
/** 这个key用来存储上一次下拉刷新成功的时间 */
@property (copy, nonatomic) NSString *lastUpdatedTimeK
/** 上一次下拉刷新成功的时间 */
@property (strong, nonatomic, readonly) NSDate *lastUpdatedT
/** 忽略多少scrollView的contentInset的top */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetT
MJRefreshFooter.h
@interface MJRefreshFooter : MJRefreshComponent
/** 创建footer */
+ (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingB
/** 创建footer */
+ (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)
/** 提示没有更多的数据 */
- (void)noticeNoMoreD
/** 重置没有更多的数据(消除没有更多数据的状态) */
- (void)resetNoMoreD
/** 忽略多少scrollView的contentInset的bottom */
@property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetB
/** 自动根据有无数据来显示和隐藏(有数据就显示,没有数据隐藏) */
@property (assign, nonatomic) BOOL automaticallyH
MJRefreshAutoFooter.h
@interface MJRefreshAutoFooter : MJRefreshFooter
/** 是否自动刷新(默认为YES) */
@property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyR
/** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
@property (assign, nonatomic) CGFloat triggerAutomaticallyRefreshP
* 由于这个框架的功能较多,就不写具体文字描述其用法
* 大家可以直接参考示例中的MJTableViewController、MJCollectionViewController、MJWebViewController,更为直观快速
下拉刷新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-动画图片
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 设置普通状态的动画图片
[header setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[header setImages:pullingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置header
self.tableView.header =
下拉刷新03-隐藏时间
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
下拉刷新04-隐藏状态和时间
// 隐藏时间
header.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态
header.stateLabel.hidden = YES;
下拉刷新05-自定义文字
// 设置文字
[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];
下拉刷新06-自定义刷新控件
self.tableView.header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
// 具体实现参考MJDIYHeader.h和MJDIYHeader.m
上拉刷新01-默认
self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
self.tableView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新02-动画图片
// 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadMoreData方法)
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置刷新图片
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置尾部
self.tableView.footer =
上拉刷新03-隐藏刷新状态的文字
// 隐藏刷新状态的文字
footer.refreshingTitleHidden = YES;
// 如果没有上面的方法,就用footer.stateLabel.hidden = YES;
上拉刷新04-全部加载完毕
// 变为没有更多数据的状态
[footer noticeNoMoreData];
上拉刷新05-自定义文字
// 设置文字
[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];
上拉刷新06-加载后隐藏
// 隐藏当前的上拉刷新控件
self.tableView.footer.hidden = YES;
上拉刷新07-自动回弹的上拉01
self.tableView.footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
上拉刷新08-自动回弹的上拉02
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 设置普通状态的动画图片
[footer setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
[footer setImages:pullingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[footer setImages:refreshingImages forState:MJRefreshStateRefreshing];
// 设置尾部
self.tableView.footer =
上拉刷新09-自定义刷新控件(自动刷新)
self.tableView.footer = [MJDIYAutoFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具体实现参考MJDIYAutoFooter.h和MJDIYAutoFooter.m
上拉刷新10-自定义刷新控件(自动回弹)
self.tableView.footer = [MJDIYBackFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
// 具体实现参考MJDIYBackFooter.h和MJDIYBackFooter.m
UICollectionView01-上下拉刷新
// 下拉刷新
self.collectionView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
// 上拉刷新
self.collectionView.footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
UIWebView01-下拉刷新
// 添加下拉刷新控件
self.webView.scrollView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
本框架纯ARC,兼容的系统&=iOS6.0、iPhone\iPad横竖屏
一起携手打造天朝乃至世界最好用的刷新框架,做天朝程序员的骄傲
阅读(...) 评论()MJRefresh类------&下拉刷新,上拉加载 - CSDN博客
MJRefresh类------&下拉刷新,上拉加载
@MJ大神出品,很方便的实现下拉刷新,上拉加载数据,下载地址:
1.将MJRefresh文件夹整个导入所需的工程中。(支持ARC,MRC工程要注意设置)
2.文件夹中的MJRefresh.bundle—&arrow@2x.png 图片可自行替换,这个会在刷新过程中显示。
3.可以在MJRefreshConst.h和MJRefreshConst.m文件中自定义显示的文字内容和文字颜色。
4.只要你的view能够滚动,就能集成这个控件,比如UIScrollView、UITableView、UICollectionView
5 &导入头文件 & #import &MJRefresh.h&
& & &MJ大神提供了代理协议方法&MJRefreshBaseViewDelegate&和Block方法,大家随便选一种实现就行
下面给出代理协议方法实现的主要代码:
& & & 主要实现:上拉加载10条新闻,每次都是显示在最前面;下拉加载10条新闻,每次都是显示在已有新闻下面
& & &&@自动刷新:调用beginRefreshing可以自动进入下拉刷新状态
#import &NewsListViewController.h&
#import &HMTMyCustomNetRequest.h&
#import &NewsItem.h&
#import &MJRefresh.h&
@interface NewsListViewController () &MJRefreshBaseViewDelegate&
HMTMyCustomNetRequest * _
MJRefreshHeaderView * _
MJRefreshFooterView * _
@property (nonatomic,retain)NSMutableArray * newDataA
@property (nonatomic,retain)NSMutableArray * oldDataA
@property (nonatomic,copy)NSString * dataS
@implementation NewsListViewController
- (void)dealloc
[_header release];
[_footer release];
RELEASE_SAFELY(_dataString);
RELEASE_SAFELY(_newDataArray);
RELEASE_SAFELY(_oldDataArray);
//取消网络请求
[_request cancelNSURLConnection];
_request =
[super dealloc];
- (id)initWithStyle:(UITableViewStyle)style
self = [super initWithStyle:style];
if (self) {
// Custom initialization
- (void)viewDidLoad
[super viewDidLoad];
number = 0;
#pragma mark 从顶部往下刷新------&下拉刷新
_header = [MJRefreshHeaderView header];
_header.scrollView = self.tableV
_header.delegate =
#pragma mark 从底部往上刷新------&上拉刷新
_footer = [MJRefreshFooterView footer];
_footer.scrollView = self.tableV
_footer.delegate =
self.newDataArray = [NSMutableArray array];
self.oldDataArray = [NSMutableArray array];
#pragma mark - 开始刷新
- (void)refreshViewBeginRefreshing:(MJRefreshBaseView *)refreshView{
self.dataString = [[NSString stringWithFormat:@&date=&startRecord=%lu&,number] stringByAppendingString:@&&len=10&udid=&terminalType=Iphone&cid=213&];
_request = [[HMTMyCustomNetRequest alloc] init];
NSData * postData = [_dataString dataUsingEncoding:NSUTF8StringEncoding];
[_request requestForPOSTWithUrl:@&http://ipad-.cn/DigitalPublication/publish/Handler/APINewsList.ashx& postData:postData];
[_request setFinishLoadBlock:^(NSData * data){
//解析数据
NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray * originalArray = [dic objectForKey:@&news&];
//将originalArray中的字典,逐个封装为newsItem数据对象,存储在UITableView的数据源中
for (int i = 0; i&[originalArray count]; i++) {
//从解析得到的数组中,获取包含新闻信息的字典对象并把它封装为NewsItem类型的数据对象
NewsItem * item = [[NewsItem alloc] initWithDic:[originalArray objectAtIndex:i]];
//将封装好数据对象item添加到tableView的数据源中
[_newDataArray addObject:item];
[item release];
#pragma mark 下拉刷新,要的是加载新数据---见网易新闻刷新
if ([refreshView isMemberOfClass:[MJRefreshHeaderView class]]) {
for (int i = 0; i & [_newDataArray count]; i++) {
[self.oldDataArray insertObject:[_newDataArray objectAtIndex:i] atIndex:i];
[self.tableView reloadData];
// 结束刷新
[refreshView endRefreshing];
#pragma mark 上拉加载,要的是加载更多数据---见百度贴吧翻页
}else if([refreshView isMemberOfClass:[MJRefreshFooterView class]]){
for (int i = 0; i & [_newDataArray count]; i++) {
[self.oldDataArray addObject:[_newDataArray objectAtIndex:i]];
[self.tableView reloadData];
// 结束刷新
[refreshView endRefreshing];
#pragma mark - 刷新结束时调用的方法
- (void)refreshViewEndRefreshing:(MJRefreshBaseView *)refreshView{
// 下拉刷新
if ([refreshView isMemberOfClass:[MJRefreshHeaderView class]]) {
self.newDataArray = [NSMutableArray array];
number += 10;
self.newDataArray = [NSMutableArray array];
number += 10;
#pragma mark - 监测状态
- (void)refreshView:(MJRefreshBaseView *)refreshView stateChange:(MJRefreshState)state{
switch (state) {
case MJRefreshStateNormal:
NSLog(@&%@----切换到:普通状态&, refreshView.class);
case MJRefreshStatePulling:
NSLog(@&%@----切换到:松开即可刷新的状态&, refreshView.class);
case MJRefreshStateRefreshing:
NSLog(@&%@----切换到:正在刷新状态&, refreshView.class);
- (void)didReceiveMemoryWarning
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
#pragma mark - Table view data source
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section
return [_oldDataArray count];
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
NewsItem * item = [_oldDataArray objectAtIndex:indexPath.row];
static NSString *CellIdentifier = @&Cell&;
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if (!cell) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];
cell.textLabel.text = [NSString stringWithFormat:@&%lu %@&,indexPath.row+1,item.newsTitle];
Block实现的主要代码:
#pragma mark 下拉刷新,要的是加载新数据---见网易新闻刷新
- (void)refreshViewOfBlock{
_header = [MJRefreshHeaderView header];
_header.scrollView = self.tableV
[_header setBeginRefreshingBlock:^(MJRefreshBaseView * refreshView){
self.dataString = [[NSString stringWithFormat:@&date=&startRecord=%lu&,number] stringByAppendingString:@&&len=10&udid=&terminalType=Iphone&cid=213&];
_request = [[HMTMyCustomNetRequest alloc] init];
NSData * postData = [_dataString dataUsingEncoding:NSUTF8StringEncoding];
[_request requestForPOSTWithUrl:@&http://ipad-.cn/DigitalPublication/publish/Handler/APINewsList.ashx& postData:postData];
[_request setFinishLoadBlock:^(NSData * data){
//解析数据
NSDictionary * dic = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingMutableContainers error:nil];
NSArray * originalArray = [dic objectForKey:@&news&];
//将originalArray中的字典,逐个封装为newsItem数据对象,存储在UITableView的数据源中
for (int i = 0; i&[originalArray count]; i++) {
//从解析得到的数组中,获取包含新闻信息的字典对象并把它封装为NewsItem类型的数据对象
NewsItem * item = [[NewsItem alloc] initWithDic:[originalArray objectAtIndex:i]];
//将封装好数据对象item添加到tableView的数据源中
[_DataArray addObject:item];
[item release];
for (int i = 0; i & [_DataArray count]; i++) {
[self.oldDataArray insertObject:[_DataArray objectAtIndex:i] atIndex:i];
[self.tableView reloadData];
// 结束刷新
[refreshView endRefreshing];
[_header setEndStateChangeBlock:^(MJRefreshBaseView * refreshView){
NSLog(@&11111&);
self.DataArray = [NSMutableArray array];
number += 10;
_header.refreshStateChangeBlock = ^(MJRefreshBaseView *refreshView, MJRefreshState state) {
// 控件的刷新状态切换了就会调用这个block
switch (state) {
case MJRefreshStateNormal:
NSLog(@&%@----切换到:普通状态&, refreshView.class);
case MJRefreshStatePulling:
NSLog(@&%@----切换到:松开即可刷新的状态&, refreshView.class);
case MJRefreshStateRefreshing:
NSLog(@&%@----切换到:正在刷新状态&, refreshView.class);
本文已收录于以下专栏:
相关文章推荐
支持哪些控件的刷新
UIScrollView、UITableView、UICollectionView、UIWebView
如何使用MJRefresh
cocoapods导入:pod...
现在主流的 APP 中都会有刷新功能, 有下拉刷新数据,有上划加载更多.现在很多优秀的第三方能帮我们轻松实现类似功能, 今天我就借用大牛李明杰老师的第三方 MJRefresh来实现简单的刷新功能.
首先我们来讨论一下Viewcontrol无法释放的问题最近在项目运行时发现这个内存消耗不是一般的高这里内存较高也是有原因的,因为我这里展示了一张高度有两个屏幕高度的UIImageView。
好的吧,...
在上拉加载和下拉刷新的方法中,凡是引用了self,就必须使用__weak修饰符,不然控制器不会走dealloc方法。
#define WeakObj(o) autoreleasepool{} __...
问题1:ARC与MRC混编
可以给ARC项目添加MRC标记(-fno-objc-arc),也可以给MRC项目添加ARC标记(-fobjc-arc)
问题2:OC委托报错
Existing i...
近期项目用到了mjrefresh,产品要求列表的数据不满一页的话就自动隐藏下面的“上拉加载更多”或是“到底了”,写了个UItableview的分类来实现了这个功能:
代码如下:
// MJRefr...
博文主要介绍几种常用刷新库的使用方法和下载地址:
一.MJRefresh
Demo地址:/CoderMJLee/MJRefresh
1.新版本介绍ver...
下拉刷新01-默认
self.tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状...
首先要感谢这篇文章,自己在网上找了很多资料,这篇写的比较好:/mjrefresh-ios/
自己学习使用了之后感觉其实还是很好用的,主要就是header...
他的最新文章
讲师:钟钦成
讲师:宋宝华
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)使用MJRefresh实现上拉加载,下拉刷新功能!!
注:本文转自于 & 先关连接:
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。}

我要回帖

更多关于 如何刷新表格数据 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信