对于加载数据,感觉最容易上手的就是MJRefresh这个加载第三方库了。
记得将MJRefresh导入工程里面,不然就尴尬了。
简单记载一下MJRefresh做分页,毕竟现在用的还是很少:
记得在初始化TableView
的时候加入
上拉加载
_tableView.mj_footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
//页码
weakSelf.page++;
[weakSelf getMoveDataSource];
}];
以及
下拉刷新
_tableView.mj_header = [MJRefreshNormalHeader headerWithRefreshingBlock:^{
//需要将页码设置为1
weakSelf.page = 1;
[weakSelf getDataSource];
}];
保证自己在进入界面的时候就要开始加载
感觉一般的项目中,直接就在viewDidLoad
中加入一行刷新代码,当然,如果有其他操作的话,也可以加入到其他函数中间去。
[_tableView.mj_header beginRefreshing];
数据加载完毕之后回调函数里参照
网络请求的时候本人习惯是用weakSelf.tableView.mj_footer.hidden
来显示是否有更多值,一般没有数据之后直接是将他设置为YES把它隐藏起来。
不过MJRefresh有一个数据加载完的样式
[weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
下拉刷新
#pragma mark 刷新
-(void)getDataSource{
***参数*** block:^(返回值, NSError *error) {
//先判断有没有Error
if (error == nil) {
//请求成功
NSArray * list = 取值
if (list.count>0) {
[weakSelf.tableViewDataSource 赋值];
//刷新界面
[weakSelf.tableView reloadData];
//注意将TableView的mj_header停止
[weakSelf.tableView.mj_header endRefreshing];
//PAGESIZE为分页个数
if (weakSelf.tableViewDataSource.count < PAGESIZE) {
//可以使用endRefreshingWithNoMoreData告诉用户数据请求完成,不过本人习惯将他隐藏起来,看需求了
// [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
weakSelf.tableView.mj_footer.hidden = YES;
}else {
weakSelf.tableView.mj_footer.hidden = NO;
}
}else {
//无数据 也是要停止刷新的
[weakSelf.tableView.mj_header endRefreshing];
// [weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
weakSelf.tableView.mj_footer.hidden = YES;
//记得提示没有数据
}
}else {
//请求错误的话也是要将列表更新一次
weakSelf.tableViewDataSource = [NSMutableArray array];
[weakSelf.tableView reloadData];
// [weakSelf.tableView.mj_header endRefreshing];
weakSelf.tableView.mj_footer.hidden = YES;
}
}];
}
上拉加载
#pragma mark 加载
-(void)getMoveDataSource{
****参数***** block:^(返回值, NSError *error) {
if (error == nil) {
//请求成功
NSArray *list = 取值;
if (list.count > 0) {
[weakSelf.tableViewDataSource 赋值];
[weakSelf.tableView reloadData];
[weakSelf.tableView.mj_footer endRefreshing];
//这里做下判断 如果页码*每个页数不正常的话就代表数据不够多了,就要把上拉加载隐藏了。
if (weakSelf.tableViewDataSource.count < PAGESIZE*_page) {
//[weakSelf.tableView.mj_footer endRefreshingWithNoMoreData];
weakSelf.tableView.mj_footer.hidden = YES;
}
}else {
//无数据
[weakSelf.tableView.mj_header endRefreshing];
weakSelf.tableView.mj_footer.hidden = YES;
}
}else{
[weakSelf.tableView.mj_footer endRefreshing];
weakSelf.tableView.mj_footer.hidden = YES;
}
}];
}
以上就是分页刷新的基本操作逻辑了,如果有其他需求可以另行增加或者修改。
简单记载一下,怕到时候自己忘记中间一些逻辑又要自己从头去写,还是记一下比较好。