zoukankan      html  css  js  c++  java
  • ios--->上下拉刷新控件MJRefresh

    上下拉刷新控件MJRefresh

    一、类结构

    MJRefreshComponent.h
    MJRefreshHeader.h
    MJRefreshFooter.h
    MJRefreshAutoFooter.h

    导入
    • cocoapods导入:pod 'MJRefresh'
      手动导入:
      将MJRefresh文件夹中的所有文件拽入项目中
      导入主头文件:#import "MJRefresh.h"

    • MJRefreshComponent.h

    /** 刷新控件的基类 */
    @interface MJRefreshComponent : UIView
    #pragma mark - 刷新状态控制
    /** 进入刷新状态 */
    - (void)beginRefreshing;
    /** 结束刷新状态 */
    - (void)endRefreshing;
    /** 是否正在刷新 */
    - (BOOL)isRefreshing;
    
    #pragma mark - 其它
    /** 根据拖拽比例自动切换透明度 */
    @property (assign, nonatomic, getter=isAutomaticallyChangeAlpha) BOOL automaticallyChangeAlpha;
    @end
    
    • MJRefreshHeader.h
    @interface MJRefreshHeader : MJRefreshComponent
    /** 创建 header */
    + (instancetype)headerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
    /** 创建 header */
    + (instancetype)headerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
    
    /** 这个 key 用来存储上一次下拉刷新成功的时间 */
    @property (copy, nonatomic) NSString *lastUpdatedTimeKey;
    /** 上一次下拉刷新成功的时间 */
    @property (strong, nonatomic, readonly) NSDate *lastUpdatedTime;
    
    /** 忽略多少 scrollView 的 contentInset 的顶部 */
    @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetTop;
    @end
    
    
    • MJRefreshFooter.h
    @interface MJRefreshFooter : MJRefreshComponent
    /** 创建 footer */
    + (instancetype)footerWithRefreshingBlock:(MJRefreshComponentRefreshingBlock)refreshingBlock;
    /** 创建 footer */
    + (instancetype)footerWithRefreshingTarget:(id)target refreshingAction:(SEL)action;
    
    /** 提示没有更多的数据 */
    - (void)noticeNoMoreData;
    /** 重置没有更多的数据(消除没有更多数据的状态) */
    - (void)resetNoMoreData;
    
    /** 忽略多少 scrollView 的 contentInset 的底部*/
    @property (assign, nonatomic) CGFloat ignoredScrollViewContentInsetBottom;
    
    /** 自动根据有无数据来显示和隐藏 */
    @property (assign, nonatomic) BOOL automaticallyHidden;
    @end
    
    • MJRefreshAutoFooter.h
    @interface MJRefreshAutoFooter : MJRefreshFooter
    /** 是否自动刷新(默认为 YES) */
    @property (assign, nonatomic, getter=isAutomaticallyRefresh) BOOL automaticallyRefresh;
    
    /** 当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新) */
    @property (assign, nonatomic) CGFloat appearencePercentTriggerAutoRefresh;
    @end
    

    三、例子:下拉刷新

    • 设置刷新
    //1.block方式使用
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
            // 进入刷新状态后会自动调用这个block
        }];
    // 2.设置回调方式使用(一旦进入刷新状态,就调用 target 的 action,也就是调用 self 的 loadNewData 方法)
    self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    // 3.手动进入刷新状态
        [self.tableView.mj_header beginRefreshing];
        
    // 4.手动结束刷新状态
        [self.tableView.mj_header endRefreshing];
    
    • 设置动画图片
    // 设置回调(一旦进入刷新状态,就调用 targett 的 action,即调用 self 的 loadNewData 方法)
    //注意:这里的动画是帧动画,所以要设置三个图片的帧动画
        MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
        
        UIImage *image1=[UIImage imageNamed:@"cellmorebtnclick.png"];
        UIImage *image2=[UIImage imageNamed:@"cellmorebtnnormal.png"];
        UIImage *image3=[UIImage imageNamed:@"imageBackground.png"];
        // 设置普通状态的动画图片
        NSArray *idleImages = @[image1,image2,image3];
        [header setImages:idleImages forState:MJRefreshStateIdle];
    
        // 设置即将刷新状态的动画图片(一松开就会刷新的状态)
        NSArray *pullingImages = @[image1,image2,image3];
        [header setImages:pullingImages forState:MJRefreshStatePulling];
    
        // 设置正在刷新状态的动画图片
        NSArray *refreshingImages = @[image1,image2,image3];
        [header setImages:refreshingImages forState:MJRefreshStateRefreshing];
        // 设置 header
        self.tableView.mj_header = header;
    

    • 下拉刷新-隐藏各种状态
    // 隐藏时间
    header.lastUpdatedTimeLabel.hidden = YES;
    
    // 隐藏时间
    header.lastUpdatedTimeLabel.hidden = YES;
    
    // 隐藏状态
    header.stateLabel.hidden = YES;
    
    • 下拉刷新-自定义文字
    // 设置文字
    [header setTitle:@"Pull down to refresh" 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.tableView.mj_header = [MJDIYHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];
    // 具体实现参考 MJDIYHeader.h 和 MJDIYHeader.m
    

    参考:http://www.jianshu.com/p/59e4d2359fdb

  • 相关阅读:
    Git 远程操作详解
    Golang io标准库
    Golang strings标准库
    Go WebSocket 实现
    Golang Gorm零值数据更新小坑
    [Linux] 分区扩容
    即截即贴,推荐一个提升截图对比效率的工具Snipaste
    POI 替换 word 关键字并保留样式
    前端图片压缩与 zip 压缩
    ubuntu20更换内核
  • 原文地址:https://www.cnblogs.com/frankltf/p/7865446.html
Copyright © 2011-2022 走看看