美文网首页
MJRefresh使用

MJRefresh使用

作者: BigBossZhu | 来源:发表于2017-06-15 16:57 被阅读542次

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

    相关文章

      网友评论

          本文标题:MJRefresh使用

          本文链接:https://www.haomeiwen.com/subject/xbuyqxtx.html