IOS 列表tableView、collectionView上拉自动加载数据,预加载效果
admin
2022-06-08 17:35
短信预约 -IT技能 免费直播动态提醒
列表tableView、collectionView上拉自动加载数据,预加载效果,废话不多说直接上代码:
方法一:直接用MJRefresh就可以实现
MJRefreshAutoNormalFooter *footer = [MJRefreshAutoNormalFooter footerWithRefreshingBlock:^{
//请求数据
weakSelf.pageNo++;
[weakSelf requestListData];
}];
//自动触发时间,如果为 -1, 则为无限触发
footer.autoTriggerTimes = -1;
//当底部控件出现多少时就自动刷新(默认为1.0,也就是底部控件完全出现时,才会自动刷新,设置为-1则是未到满屏的时候刷新
footer.triggerAutomaticallyRefreshPercent = -1;
self.tableView.mj_footer = footer;
方法二:通过数据条数来控制
//模拟请求网络数据
WEAKSELF;
self.isLoading = YES;
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
sleep(1.0);
NSMutableArray *arr = [NSMutableArray array];
for (int i = 0; i<self.pageSize; i++) {
NSString *str = @"哈哈哈哈哈";
[arr addObject:str];
}
dispatch_async(dispatch_get_main_queue(), ^{
if (weakSelf.pageNo == 1 && weakSelf.allData.count) { //清空
[weakSelf.allData removeAllObjects];
}
self.isLoading = NO;
//[weakSelf dissmissHud];
[weakSelf.allData addObjectsFromArray:arr];
[weakSelf.tableView reloadData];
});
});
然后在代理方法里判断数据条数进行刷新:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath
{
if (self.isLoading == YES) {
return;
}
// 80%数据出现后,就去加载数据
if (indexPath.row > self.allData.count * 0.8) {
self.pageNo++;
[self requestListData];
}
}
方法三:与第二种方法类似:
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath{
if (indexPath.row == self.allData.count - 5 && self.isLoading) {
self.pageNo++;
[self requestListData];
}
}
END.
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341