项目中一般都会用到上拉或者下拉刷新,平时用的最多的框架为MJRefresh,这个框架提供了一些简单的API,但初次接触的人难免束手束脚,不知如何下手。
本文主要讲讲MJRefresh的最基本使用方法及对代码进行简单封装
1.基本使用
MJRefresh提供了一个基于UIScrollview的分类,分类增加了mj_header和 mj_footer的属性,分别对应下拉刷新控件和上拉刷新控件,我们拿到tableView或collectionView的mj_header和mj_footer进行属性设置并开启刷新就行了
以下为实现代码:
- (void)viewDidLoad {
[super viewDidLoad];
[self setupRefresh];
}
- (void)setupRefresh {
//创建一个下拉刷新控件 在开始刷新后会调用此block
MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//加载数据(包括刷新tableView)
[self loadNewTopics];
//结束刷新
[self.tableView.mj_header endRefreshing];
}];
//自动改变透明度 (当控件被导航条挡住后不显示)
header.automaticallyChangeAlpha = YES;
// 设置各种状态下的刷新文字
[header setTitle:@"下拉可以刷新" forState:MJRefreshStateIdle];
[header setTitle:@"松开立即刷新" forState:MJRefreshStatePulling];
[header setTitle:@"正在刷新..." forState:MJRefreshStateRefreshing];
// 设置字体
header.stateLabel.font = [UIFont systemFontOfSize:13];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:13];
// 设置颜色
header.stateLabel.textColor = [UIColor grayColor];
header.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
//初始化时开始刷新
[header beginRefreshing];
self.tableView.mj_header = header;
}
2.简单封装
在一个程序中用到下拉刷新的地方很有可能不止一处,在实际使用的时候没有必要在每个控制器中都进行详细的设置,故新建一个继承MJRefreshNormalHeader的类,在类里面设置header或footer的相关属性,在调用的时候即可实现“一行代码解决下拉刷新”
以下为详细代码:(footer封装部分类似)
封装部分:
DGLRefreshHeader.h
DGLRefreshHeader.h
#import <MJRefresh/MJRefresh.h>
@interface DGLRefreshHeader : MJRefreshNormalHeader
@end
DGLRefreshHeader.m
DGLRefreshHeader.m
#import "DGLRefreshHeader.h"
@implementation DGLRefreshHeader
- (instancetype)init {
self = [super init];
if (self) {
//自动改变透明度 (当控件被导航条挡住后不显示)
self.automaticallyChangeAlpha = YES;
// 设置各种状态下的刷新文字
[self setTitle:@"下拉可以刷新" forState:MJRefreshStateIdle];
[self setTitle:@"松开立即刷新" forState:MJRefreshStatePulling];
[self setTitle:@"正在刷新..." forState:MJRefreshStateRefreshing];
// 设置字体
self.stateLabel.font = [UIFont systemFontOfSize:13];
self.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:13];
// 设置颜色
self.stateLabel.textColor = [UIColor grayColor];
self.lastUpdatedTimeLabel.textColor = [UIColor blueColor];
//初始化时开始刷新
[self beginRefreshing];
}
return self;
}
@end
代码实现部分viewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setupRefresh];
}
- (void)setupRefresh {
//下拉刷新 在开始刷新后会调用此block
self.tableView.mj_header = [DGLRefreshHeader headerWithRefreshingBlock:^{
//加载数据(包括刷新tableView)
[self loadNewTopics];
//结束刷新
[self.tableView.mj_header endRefreshing];
}];
//上拉刷新 在开始刷新后会调用此block
self.tableView.mj_footer = [DGLRefreshFooter footerWithRefreshingBlock:^{
[self loadMoreTopics];
[self.tableView.mj_footer endRefreshing];
}];
}
由此可见封装过后减少了许多重复代码
网友评论