tableview的下拉刷新和上拉加载功能实现

使用一个第三方的库 MJRefresh

在viewcontroller.m里面引入 import"MJRefresh.h"头文件

1.下拉刷新的实现

//集成刷新
- (void)setupRefresh{
    
    self.myTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        // 进入刷新状态后会自动调用这个block
    }];
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    self.myTableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerRefreshing)];
    //关闭自动刷新
    [self.myTableView.mj_header beginRefreshing];
}

//结束刷新
- (void)endRefreshingWithNoMoreData{
    [_myTableView.mj_header endRefreshing];
}

//开始刷新   获取服务器数据
-(void)headerRefreshing{
    //判断网络状态
    if ([Tools checkNetWorking1]) {
        hud = [MBProgressHUD showHUDAddedTo:self.view animated:YES];
        [Tools showHUD:@"施工中" andView:self.view andHUD:hud];
        //删除数据库里面的数据

        //调用服务器接口
        [self endRefreshingWithNoMoreData];
    }
    else{
        //加载本地数据
        [self endRefreshingWithNoMoreData];
        [Tools ToastNotification:@"网络异常"  andView:self.view andLoading:NO andIsBottom:NO];
    }
    
}
在确认收到服务器的数据时,更新数据源,调用
[self.myTableView reloadData];
2.上拉加载

类似于下拉刷新

//集成刷新
- (void)setupRefresh{
    self.topLendTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
           // 进入刷新状态后会自动调用这个block
    }];
    // 设置回调(一旦进入刷新状态,就调用target的action,也就是调用self的loadNewData方法)
    self.topLendTableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerRefreshing)];
    //关闭自动刷新
   // [self.topLendTableView.mj_footer beginRefreshing];
}

//结束刷新
- (void)endRefreshingWithNoMoreData{
    [_topLendTableView.mj_footer endRefreshing];
}

//开始刷新
-(void)footerRefreshing{
    XKLog(@"刷新数据了");
    //继续获取数据
    else
    {
        UIAlertView *alertView = [[UIAlertView alloc]initWithTitle:@"" message:@"已经加载完了" delegate:self cancelButtonTitle:nil otherButtonTitles:@"OK", nil];
        [alertView show];
        [self endRefreshingWithNoMoreData];

    }
   
}

在确认收到服务器的数据时,更新数据源,调用

[self.myTableView reloadData];
[self endRefreshingWithNoMoreData];

注意:在上拉加载时,会遇到数据的和并问题,采用两个动态数组,注意一定要初始化,不然合并后的数组会一直为空。
NSMutableArray  *olddata;
NSMutableArray *newdata;
- (void)viewDidLoad {
    newdata = [[NSMutableArray alloc]init];
    olddata = [[NSMutableArray alloc]init];
}
[newdata addObjectsFromArray:olddata];//合并数组


刷新控件的状态
//普通闲置状态
MJRefreshSateIdle = 1;
//松开就可以进行刷新的状态
MJRefreshStatePulling,
//正在刷新中的状态
MJRefreshStateRefreshing,
//即将刷新的状态
MJRefreshStateWillRefresh,
//所有数据加载完毕,没有更多数据了
MJRefreshStateNoMoreData
找到状态后,修改即可,就是endRefreshing方法执行完毕后,修改相应mj_footer.state的状态为MJRefreshStateNoMoreData即可。
//结束刷新
[self.tableview.mj_footer endRefreshing];
self.tableview.mj_footer.state = MJRefreshStateNoMoreData;
注:有什么不明白的地方,或者写错的地方,欢留言纠错。



 
  
 
  
 
 

你可能感兴趣的:(ios开发,ios,MJRefresh,tableview)