//随机数据
#define NumData [NSString stringWithFormat:@"我是随机数据%d", arc4random_uniform(1000)]
@interface TableView ()<UITableViewDataSource, UITableViewDelegate>
{
UITableView *_tableView;;
}
//随机数据
@property (strong, nonatomic) NSMutableArray *data;
//普通刷新状态下得图片
@property (nonatomic, strong) NSMutableArray *normalImages;
//正在刷新状态下得图片
@property (nonatomic, strong) NSMutableArray *refreshImages;
@end
@implementation TableView
- (void)viewDidLoad {
[super viewDidLoad];
// 0.设置表视图
[self _initTableView];
// 1.默认样式
[self defaultStyle];
// 2.图片动画样式
// [self imageAnimationStyle];
// 3.上拉刷新控件自动回弹
// [self footerAutoBackStyle];
// 4.上拉刷新控件自动回弹(有图片动画)
// [self footerBackImageAnimationStyle];
}
//初始化表视图
- (void)_initTableView
{
// 设置tableview
_tableView = [[UITableView alloc] initWithFrame:CGRectMake(0, 0, 375, 667) style:UITableViewStyleGrouped];
_tableView.frame = CGRectMake(0, 0, 375, 667);
[self.view addSubview:_tableView];
_tableView.delegate = self;
_tableView.dataSource = self;
}
#pragma mark - 数据懒加载
- (NSMutableArray *)data
{
if (_data == nil) {
_data = [[NSMutableArray alloc] init];
}
return _data;
}
//默认刷新状态下的图片
- (NSMutableArray *)normalImages
{
if (_normalImages == nil) {
_normalImages = [[NSMutableArray alloc] init];
// 循环添加图片
for (NSUInteger i = 1; i<=60; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_anim__000%ld", i]];
[self.normalImages addObject:image];
}
}
return _normalImages;
}
//正在刷新状态下的图片
- (NSMutableArray *)refreshImages
{
if (_refreshImages == nil) {
_refreshImages = [[NSMutableArray alloc] init];
// 循环添加图片
for (NSUInteger i = 1; i<=3; i++) {
UIImage *image = [UIImage imageNamed:[NSString stringWithFormat:@"dropdown_loading_0%ld", i]];
[self.refreshImages addObject:image];
}
}
return _refreshImages;
}
/**
支持下面控件的刷新:
UIScrollView、UITableView、UICollectionView
使用类:
1.下拉更新
MJRefreshNormalHeader:下拉默认样式
MJRefreshGifHeader:下拉 有图片动画
2.上拉更新
MJRefreshAutoNormalFooter:上拉默认样式
MJRefreshAutoGifFooter:上拉 有图片动画
3.上拉回弹
MJRefreshBackNormalFooter:上拉回弹默认样式
MJRefreshBackGifFooter:上拉回弹 有图片动画
4.UIScrollView类目
UIScrollView+MJRefresh:设置刷新样式(设置上拉样式时能刷新数据,但是看不到刷新样式,样式不能设置)
*/
#pragma mark - 默认样式
- (void)defaultStyle
{
// 下拉
_tableView.header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//加载数据
[self headerLoadData];
}];
// 进入刷新状态
[_tableView.header beginRefreshing];
// 上拉
MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerLoadData)];
_tableView.footer = footer;
}
#pragma mark - 图片动画样式
- (void)imageAnimationStyle
{
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(headerLoadData)];
//======================================下拉 对象属性设置============================================
// (1)设置普通状态的动画图片
[header setImages:self.normalImages forState:MJRefreshStateIdle];
// (2)设置即将刷新状态的动画图片
[header setImages:self.refreshImages forState:MJRefreshStatePulling];
// (3)设置正在刷新状态的动画图片
[header setImages:self.refreshImages forState:MJRefreshStateRefreshing];
// (4)设置自动切换透明度,下拉时alpha属性从0-1
header.autoChangeAlpha = YES;
// (5)隐藏文字
// header.stateLabel.hidden = YES;
// (6)隐藏刷新时间
// header.lastUpdatedTimeLabel.hidden = YES;
// (7)自定义文字
//普通状态下的文字
[header setTitle:@"下拉更新数据" forState:MJRefreshStateIdle];
//松开就可以刷新状态下的文字
[header setTitle:@"松手要刷新了" forState:MJRefreshStatePulling];
//正在舒心状态下得文字
[header setTitle:@"正在刷新" forState:MJRefreshStateRefreshing];
//设置字体和颜色
header.stateLabel.font = [UIFont systemFontOfSize:14];
header.lastUpdatedTimeLabel.font = [UIFont systemFontOfSize:12];
header.stateLabel.textColor = [UIColor redColor];
header.lastUpdatedTimeLabel.textColor = [UIColor orangeColor];
// 设置header
[header beginRefreshing];
_tableView.header = header;
//========================上拉 对象属性设置==============================
MJRefreshAutoGifFooter *footer = [MJRefreshAutoGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerLoadData)];
// (1)设置正在刷新图片
[footer setImages:self.refreshImages duration:3 forState:MJRefreshStateRefreshing];
// (2)隐藏刷新状态文字(上拉时只有图片)
// footer.refreshingTitleHidden = YES;
// !!!刷新后提示没有更多数据
// [footer noticeNoMoreData];
// (3)自定义文字
//普通状态下的文字
[footer setTitle:@"上拉更新数据" forState:MJRefreshStateIdle];
//正在刷新状态下的文字
[footer setTitle:@"加载数据中..." forState:MJRefreshStateRefreshing];
// !!!!没有更多数据了(在没有数据可加载时设置此属性)
// [footer setTitle:@"没有更多数据了" forState:MJRefreshStateNoMoreData];
//设置字体和颜色
footer.stateLabel.font = [UIFont systemFontOfSize:14];
footer.stateLabel.textColor = [UIColor redColor];
_tableView.footer = footer;
// !!!!隐藏上拉控件
// self.tableView.footer.hidden = YES;
//===============================================================================================
}
#pragma mark - 上拉自动回弹隐藏控件样式
- (void)footerAutoBackStyle
{
MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerLoadData)];
// 设置字体颜色
footer.stateLabel.textColor = [UIColor redColor];
_tableView.footer = footer;
}
#pragma mark - 上拉自动回弹隐藏控件样式(图片动画)
- (void)footerBackImageAnimationStyle
{
MJRefreshBackGifFooter *footer = [MJRefreshBackGifFooter footerWithRefreshingTarget:self refreshingAction:@selector(footerLoadData)];
// (1)设置普通状态的动画图片
[footer setImages:self.normalImages forState:MJRefreshStateIdle];
// (2)设置即将刷新状态的动画图片
[footer setImages:self.refreshImages forState:MJRefreshStatePulling];
// (3)设置正在刷新状态的动画图片
[footer setImages:self.refreshImages forState:MJRefreshStateRefreshing];
_tableView.footer = footer;
}
#pragma mark - UITableView代理方法
- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
return self.data.count;
}
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
NSString *ID = @"cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:ID];
if (cell == nil) {
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:ID];
}
cell.textLabel.text = self.data[indexPath.row];
return cell;
}
#pragma mark - 加载数据 2秒后退出刷新
//加载数据 3秒后退出刷新
- (void)headerLoadData
{
// 模拟添加数据
for (int i = 0; i<5; i++) {
[self.data addObject:NumData];
}
// 3秒后退出刷新
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 刷新数据
[_tableView reloadData];
// 停止刷新
[_tableView.header endRefreshing];
});
}
- (void)footerLoadData
{
// 模拟添加数据
for (int i = 0; i<5; i++) {
[self.data addObject:NumData];
}
// 3秒后退出刷新
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
// 刷新数据
[_tableView reloadData];
// 停止刷新
[_tableView.footer endRefreshing];
// 刷新后提示没有更多数据
// [self.tableView.footer noticeNoMoreData];
});
}
Demo链接: http://pan.baidu.com/s/1eQi1yQA 密码: jtan