您的位置:首页 > 其它

MJRefresh下拉刷新框架使用

2015-07-18 19:45 302 查看
//随机数据
#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: