MJRefresh下拉刷新框架使用

//随机数据
#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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值