iOS MJRefresh的简单实用场景
MJRefresh确实是个好用的第三方,也不看看github上有多少star,好吧,废话不多说,之前用MJRefresh时因为自己的愚蠢..遇到了个小bug,今天呢解决了,就写出来以免再犯.
首先在cocoapods里引入它,我这个是pod ‘MJRefresh’, ‘~>3.1.12’这个版本的.
然后应用在tableView通常或者是collectionView上,在该类中引入MJRefresh.h:
#import <MJRefresh.h>
然后我们再来设置一些tableView相关的属性:
@interface HomeViewController ()<UITableViewDelegate,UITableViewDataSource>
{
UITableView *tableView;//这是我们的列表
}
@end
#define DEVICE_SIZE [UIScreen mainScreen].bounds.size
@implementation HomeViewController
#pragma mark --创建tableView--
- (void)creatTableView
{
tableView = [[UITableView alloc]initWithFrame:CGRectMake(0, 0, DEVICE_SIZE.width, DEVICE_SIZE.height) style:UITableViewStyleGrouped];
tableView.delegate = self;
tableView.dataSource = self;
tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];//这个是将MJRefresh添加到tableView上来的
[tableView registerClass:[PowerStationTableViewCell class] forCellReuseIdentifier:@"sectionOneCell"];
[tableView registerNib:[UINib nibWithNibName:@"NearbyPowerStationTableViewCell" bundle:[NSBundle mainBundle]] forCellReuseIdentifier:@"sectionTwoCell"];
[self.view addSubview:tableView];
}
其中loadNewData这个方法是用来加载数据的方法,我们可以在这个方法里对网络进行请求.
那我们什么时候来触发这个方法呢?就要利用tableView所继承的scrollView的代理方法了.
- (void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate
{
if (!decelerate)
{
if(scrollView.contentOffset.y<-114)
{
// 马上进入刷新状态
[tableView.mj_header beginRefreshing];
}
}
}
说明:这个代理方法是滚动视图停止拖拽时调用的方法,因为我的tableView正常状态下的y轴偏移量是-64,所以我让它偏移量小于-114时才可以刷新,decelerate代表tableView是否开始减速.
一般在网络请求得到回调数据的时候来对tableView进行数据的刷新:
[tableView reloadData];
[tableView.mj_header endRefreshing];//于是我们可以在这里使下拉刷新的动画停下来
这样一来,对于普通的列表刷新场景,按照这个流程,基本是不会出错的.