IOS MJRefresh下拉刷新的使用

来源:互联网 发布:mac 删除软件缓存 编辑:程序博客网 时间:2024/05/06 02:38
//随机数据  #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)(22 * 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)(22 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{                    //        刷新数据          [_tableView reloadData];          //        停止刷新          [_tableView.footer endRefreshing];                    //    刷新后提示没有更多数据  //        [self.tableView.footer noticeNoMoreData];                  });        }  

0 0
原创粉丝点击