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
示意图:
加载完成后多展示了箭头