[iOS]MJRefresh刷新

TO:
MJRefresh
MJRefresh超详细讲解

全局刷新提示可以去Localizable.strings设置,若部分页面部分状态需要展示不同的提示,需要单独进行处理。
调用endRefreshingWithNoMoreData时,有些情况下"已经全部加载完毕"左边多展示了箭头切片。

#import "GARefreshViewController.h"
#import "MJRefresh.h"

@interface GARefreshViewController () <UITableViewDelegate, UITableViewDataSource>

@property (weak, nonatomic) IBOutlet UITableView *tableView;
@property (assign, nonatomic) NSInteger page;
@property (strong, nonatomic) NSMutableArray *dataMArr;

@end

@implementation GARefreshViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    self.title = @"列表刷新";
    _tableView.separatorStyle = NO;
    [_tableView setSeparatorStyle:NO];
    _tableView.estimatedRowHeight = 100;
    _tableView.rowHeight = UITableViewAutomaticDimension;
    
    // _tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingTarget:self refreshingAction:@selector(refresh)];
    _tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [self refresh];
    }];
    
    /*
     MJRefreshAutoNormalFooter 上拉加载更多时,拖动到刷新位置自动刷新。
     MJRefreshBackNormalFooter 上拉加载更多时,拖动到刷新位置时需要松手才会刷新。
     其中MJRefreshBackNormalFooter调用endRefreshingWithNoMoreData设置没有更多数据时,会多展示一个向上的箭头,故需要手动设置mj_footer.state = MJRefreshStateNoMoreData。
     */
     _tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
         [self refreshMore];
     }];
    
    /*
     刷新控件的状态:
     typedef NS_ENUM(NSInteger, MJRefreshState) {
        // 普通闲置状态
        MJRefreshStateIdle = 1,
        // 松开就可以进行刷新的状态
        MJRefreshStatePulling,
        // 正在刷新中的状态
        MJRefreshStateRefreshing,
        // 即将刷新的状态
        MJRefreshStateWillRefresh,
        // 所有数据加载完毕,没有更多的数据了
        MJRefreshStateNoMoreData
     };
     */
    // 若需要改变部分页面下某些状态的刷新文字,可以如下处理。
    MJRefreshNormalHeader *header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
        [self refresh];
    }];
    [header setTitle:@"拉一拉~" forState:MJRefreshStateIdle];
    _tableView.mj_header = header;
    
    MJRefreshBackNormalFooter *footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
        [self refreshMore];
    }];
    [footer setTitle:@"到底了~" forState:MJRefreshStateNoMoreData];
    _tableView.mj_footer = footer;
    
    [self refresh];
}

- (void)refresh {
    _page = 1;
    if (!_dataMArr) {
        _dataMArr = [NSMutableArray new];
    }
    [_dataMArr removeAllObjects];
    [self requestGoodsListNet];
}

- (void)refreshMore {
    _page ++;
    [self requestGoodsListNet];
}

- (void)requestGoodsListNet {
    [_tableView.mj_header endRefreshing];
    [_tableView.mj_footer endRefreshing];
    
    for (int i = 0 ; i < 20; i ++) {
        if (_page == 3) {
            [_tableView.mj_footer endRefreshingWithNoMoreData];
            _tableView.mj_footer.state = MJRefreshStateNoMoreData;
            break;
        }
        NSString *tempGoodsName = [NSString stringWithFormat:@"商品名称%ld",i + (_page-1)*20];
        [_dataMArr addObject:tempGoodsName];
    }
    
    [_tableView reloadData];
}

#pragma mark - UITableViewDataSource

- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
    return _dataMArr.count;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *identifier= @"cell";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:identifier];
    if (cell == nil) {
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:identifier];
    }
    cell.textLabel.text = _dataMArr[indexPath.row];
    return cell;
}

@end

示意图:
加载完成后多展示了箭头

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值