一般情况下,我们使用MJRefresh进行刷新和加载的时候,我们可能会这样写
- (void)getData{
//当前页码设置为1
//请求api
//结束加载
//控件reload
}
- (void)getMoreData{
//当前页码加1
//请求api
//结束加载
//控件reload
}
这样写,有一个不好的地方就是,代码重用的很多,所以,就应该考虑封装一个方法来处理
我们可以写一个这样的方法
- (void)universalGetData:(MJRefreshComponent *)refreshComponent{
}
这个MJRefreshComponent,是刷新的基类(可以点进去看一下,mjrefreshhead和mjrefreshfoot都是继承于这个类)
在这个方法里,可以这样
if ([refreshComponent isKindOfClass:[MJRefreshHeader class]]) {
self.page = 1;
self.listDatasouce = [NSMutableArray array];//初始化数据源数组
}
if ([refreshComponent isKindOfClass:[MJRefreshBackNormalFooter class]]) {
self.page += 1;
}
设置好页码之后,就开始网络请求了
[[REFNetworkManager manager] universalNetworkRequestWithNetConnectType:get requestURL:loanListFiltrate_url model:[RHomeModel class] para:self.pickDic success:^(id response) {
[weakSelf.listDatasouce addObjectsFromArray:response];
[refreshComponent endRefreshing];
if (((NSArray *)response).count < kMaxCountOfPage) {
[weakSelf.listView.mj_footer endRefreshingWithNoMoreData];
}else{
[weakSelf.listView.mj_footer resetNoMoreData];
}
[weakSelf.listView reloadData];
} successCodeError:^(id response) {
[refreshComponent endRefreshing];
} fail:^(NSError *error) {
[refreshComponent endRefreshing];
} netError:^{
[refreshComponent endRefreshing];
}];
解释一下代码:
这个网络请求,是我自己封装了一下afn的,具体解释以及代码,在这里(http://www.jianshu.com/p/bb98707e5119),不管是刷新还是加载,网络请求成功,就应该先停止停止刷新;[refreshComponent endRefreshing];
第二步,如果获取到的数据条数小于服务器规定的一页的最大条数,说明肯定没有更多数据,那么就需要:[weakSelf.listView.mj_footer endRefreshingWithNoMoreData];,否则,说明可能还有更多数据,这时,就需要:[weakSelf.listView.mj_footer resetNoMoreData];
处理也就是只要处理footview的刷新状态就可以了
其他的情况,就是请求没有返回正确的数据,那么就直接结束刷新就可以了。