iOS上下拉刷新控件MJRefresh使用方法详解

2020-01-18 21:10:51丽君

MJRefresh是一个好用的上下拉刷新的控件,github地址如下:https://www.easck.com/auto-orient/strip%7CimageView2/2" />
使用

在github上下载之后,将MJRefresh文件添加到项目中,并且在需要使用的文件上引入MJRefresh.h。然后在该文件的viewDidLoad方法中指定tableView的header和footer,如下:


#import "MJRefreshTableViewController.h"
#import "MJRefresh.h"

@interface MJRefreshTableViewController ()
@property (strong, nonatomic) IBOutlet UITableView *tableView;
@end

@implementation MJRefreshTableViewController

- (void)viewDidLoad {
[super viewDidLoad];

__weak typeof(self) weakSelf = self;
self.tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
 //刷新时候,需要执行的代码。一般是请求最新数据,请求成功之后,刷新列表
 [weakSelf loadNewData];
}];

self.tableView.mj_footer = [MJRefreshBackNormalFooter footerWithRefreshingBlock:^{
 //刷新时候,需要执行的代码。一般是请求更多数据,请求成功之后,刷新列表
 [weakSelf loadNoreData];
}];
}

/**
 请求获取最新的数据
 */
- (void)loadNewData {
NSLog(@"请求获取最新的数据");

//这里假设2秒之后获取到了最新的数据,刷新tableview,并且结束刷新控件的刷新状态
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 //刷新列表
 [weakSelf.tableView reloadData];
 //拿到当前的刷新控件,结束刷新状态
 [weakSelf.tableView.mj_header endRefreshing];
});
}

/**
 请求获取更多的数据
 */
- (void)loadNoreData {
NSLog(@"请求获取更多的数据");

//这里假设2秒之后获取到了更多的数据,刷新tableview,并且结束刷新控件的刷新状态
__weak typeof(self) weakSelf = self;
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(2.0 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
 //刷新列表
 [weakSelf.tableView reloadData];
 //拿到当前的刷新控件,结束刷新状态
 [weakSelf.tableView.mj_footer endRefreshing];
});
}
@end

按照app的实际情况来说,loadNoreData 和 loadNewData方法应该是发送数据请求,而结束刷新控件的刷新状态应该是在请求失败或者请求成功的方法中调用。

如果是带动图的刷新控件的话,就直接替换在viewDidLoad中的写法即可。


- (void)viewDidLoad {
[super viewDidLoad];

__weak typeof(self) weakSelf = self;
MJRefreshGifHeader *header = [MJRefreshGifHeader headerWithRefreshingTarget:self refreshingAction:@selector(loadNewData)];

[header setImages:idleImages forState:MJRefreshStateIdle];
[header setImages:pullingImages forState:MJRefreshStatePulling];
[header setImages:refreshingImages forState:MJRefreshStateRefreshing];

self.tableView.mj_header = header;
}

其中idleImages,pullingImages,refreshingImages是图片数组,分别对应普通闲置状态,松开就可以进行刷新的状态,正在刷新中的状态等的图片。注意,idleImages等图片数组存储的对象是UIImage。