因为项目内一直使用之前的MJRefresh,今天研究下新的MJRefresh.
1. 普通上下拉刷新
//下拉
__weak ViewController *weakSelf = self;
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf.zltableView.mj_header beginRefreshing];
[weakSelf loadPreMoreData];
}];
//隐藏时间(动画通用)
header.lastUpdatedTimeLabel.hidden = YES;
// 隐藏状态(动画通用)
header.stateLabel.hidden = YES;
//设置文字和字体
[header setTitle:@"拼命加载中啊" 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];
self.zltableView.mj_header = header;
//上拉类似(使用的类名不同)
MJRefreshAutoNormalFooter
// 变为没有更多数据的状态
[footer endRefreshingWithNoMoreData];
2. 设置动画效果的(注意导入图片数组)
__weak ViewController *weakSelf = self;
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingBlock:^{
[weakSelf.zltableView.mj_header beginRefreshing];
[weakSelf loadPreMoreData];
}];
// 设置普通状态的动画图片
NSMutableArray *idleImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=60; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%zd", i]];
[idleImages addObject:image];
}
[header setImages:idleImages forState:MJRefreshStateIdle];
// 设置即将刷新状态的动画图片(一松开就会刷新的状态)
NSMutableArray *refreshingImages = [NSMutableArray array];
for (NSUInteger i = 1; i<=3; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%zd", i]];
[refreshingImages addObject:image];
}
[header setImages:refreshingImages forState:MJRefreshStatePulling];
// 设置正在刷新状态的动画图片
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];
self.zltableView.mj_header = header;
//上拉类似(使用的类名不同)
MJRefreshAutoGifFooter
// 隐藏刷新状态的文字
footer.refreshingTitleHidden = YES;
// 变为没有更多数据的状态
[footer endRefreshingWithNoMoreData];
3. 自定义刷新控件
1. 创建子类继承MJRefreshHeader
//创建你需要的响应控件(不详述)
__weak ViewController *weakSelf = self;
ZLDIYHeader *header = [ZLDIYHeader headerWithRefreshingBlock:^{
[weakSelf.zltableView.mj_header beginRefreshing];
[weakSelf loadPreMoreData];
}];
self.zltableView.mj_header = header;
4. 自动回弹的上下拉
//状态1
self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreData)];
//状态2
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.mj_footer = footer;
5. UIWebView的下拉刷新
// 添加下拉刷新控件
self.webView.scrollView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
6. 适用于UICollectionView的上下拉
// 下拉刷新
self.collectionView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
// 上拉刷新
self.collectionView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
// 进入刷新状态后会自动调用这个block
}];
项目内的使用
1. 控制器内添加是否显示上下拉属性
//是否显示山下拉刷新(可以控制是否显示)
@property (nonatomic) BOOL showRefreshHeader;
@property (nonatomic) BOOL showRefreshFooter;
@property (nonatomic, assign) NSInteger pageNo;
2. 重写这两个属性的set方法
#pragma mark - 上下拉刷新方法----
- (void)setShowRefreshHeader:(BOOL)showRefreshHeader
{
if (_showRefreshHeader != showRefreshHeader) {
_showRefreshHeader = showRefreshHeader;
if (_showRefreshHeader) {
__weak ViewController *weakSelf = self;
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
[weakSelf.zltableView.mj_header beginRefreshing];
[weakSelf loadPreMoreData];
}];
self.zltableView.mj_header = header;
} else{
self.zltableView.mj_header.hidden = YES;
}
}
}
- (void)setShowRefreshFooter:(BOOL)showRefreshFooter
{
if (_showRefreshFooter != showRefreshFooter) {
_showRefreshFooter = showRefreshFooter;
if (_showRefreshFooter) {
__weak ViewController *weakSelf = self;
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
//开始刷新
[weakSelf.zltableView.mj_footer beginRefreshing];
[weakSelf loadMoreData];
}];
self.zltableView.mj_footer = footer;
} else {
//移除下拉刷新
self.zltableView.mj_footer.hidden = NO;
}
}
}
3. 实现相对应的上下拉方法
- (void)loadPreMoreData {
_pageNo = 0;
NSLog(@"上拉刷新加载更多数据,改变page为%ld",_pageNo);
[self requestMoreData];
}
- (void)loadMoreData {
_pageNo += 1;
NSLog(@"下拉刷新加载更多数据,改变page为%ld",_pageNo);
[self requestMoreData];
}
- (void)requestMoreData {
加载数据
[self.zltableView.mj_header endRefreshing];
[self.zltableView.mj_footer endRefreshing];
}```