美文网首页
MJRefresh的二次封装使用

MJRefresh的二次封装使用

作者: revon | 来源:发表于2017-11-21 15:42 被阅读417次

一般情况下,我们使用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的刷新状态就可以了
其他的情况,就是请求没有返回正确的数据,那么就直接结束刷新就可以了。

相关文章

网友评论

      本文标题:MJRefresh的二次封装使用

      本文链接:https://www.haomeiwen.com/subject/pclwvxtx.html