MJRefresh使用

2017-06-15  本文已影响542人  BigBossZhu

因为项目内一直使用之前的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];

}```
上一篇下一篇

猜你喜欢

热点阅读