这篇文章主要给大家介绍了关于iOS列表上拉(平滑加载数据)自动加载数据问题的相关资料,本文实现的效果很多app都用的这种效果,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
项目需求
我的的列表需要改变,原来的分页加载采用的是MJRefresh框架进行加载更多数据,这需要有一个上拉动作才能触发,而我的产品的意思是当快要滑动到底部时自动加载下一页数据。我自己看了一下,发现很多app都是采用这种模式。
关于MJRefresh
MJRefresh中并没有这样的方法,所以这个效果不一定是MJRefresh实现的,没有实现的小伙伴就不要在MJRefresh中苦苦寻找了。
功能实现
实现方法很简单,需要用到tableView的一个代理方法,就可轻松实现。- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath就是这个方法,自定义显示cell。这个方法不太常用。但是这个方法可在每个cell将要第一次出现的时候触发。然后我们可设置当前页面第几个cell将要出现时,触发请求加载更多数据。
具体代码
- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath {
NSInteger row = [indexPath row];
if (row == self.dataArray.count - 2 && self.isfinish) {
//dataArray是存放数据的数组,isfinish是请求是否完成的标识
self.pageNum++;//第几页
[self.updataDic addEntriesFromDictionary:@{@"pageSize": @(10), @"pageNum" :@(self.pageNum)}];//请求参数
[self setupDataModel];//具体请求
}
}
-(void)serverApi_FinishedSuccessed:(APIRequest *)api result:(APIResult *)sr
{//网络请求成功代理方法
if (api == self.goodsAPIRequest) {
if (self.goodsAPIRequest.netWorkType == 22) {
self.dataModel = [[GoodsListModelBase alloc]initWithDictionary:sr.dic];//转化model
[self.dataArray addObjectsFromArray:self.dataModel.data];
if (self.dataModel.data.count == 0) {
[self.tableView.mj_footer endRefreshingWithNoMoreData];
self.isfinish = NO;
}else {
[self.tableView reloadData];
if (@available(iOS 11,*)) {
dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(0.1 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
//iOS11之后reloadData方法会执行- (void)tableView:(UITableView *)tableView willDisplayCell:(UITableViewCell *)cell forRowAtIndexPath:(NSIndexPath *)indexPath 方法,将当前所有的cell过一遍,而iOS11之前只是将展示的cell过一遍。故加此方法使其在过第一次的时候不执行加载更多数据
self.isfinish = YES;
});
}else {
self.isfinish = YES;
}
}
}
}
效果如下
流畅.gif
是不是很流畅。当然还得配上MJRefresh下拉加载,以防网络状态不好的情况下刷不出数据。
关于加载时抖动问题可加上
self.tableView.estimatedRowHeight = 0;
self.tableView.estimatedSectionHeaderHeight = 0;
self.tableView.estimatedSectionFooterHeight = 0;
关闭预估算高度.
总结
到此这篇关于iOS列表上拉(平滑加载数据)自动加载数据问题解决的文章就介绍到这了,更多相关iOS列表上拉自动加载数据内容请搜索编程学习网以前的文章希望大家以后多多支持编程学习网!
本文标题为:iOS列表上拉(平滑加载数据)自动加载数据的问题解决
- SurfaceView播放视频发送弹幕并实现滚动歌词 2023-01-02
- Android studio实现动态背景页面 2023-05-23
- Android实现轮询的三种方式 2023-02-17
- Flutter实现底部和顶部导航栏 2022-08-31
- 作为iOS开发,这道面试题你能答出来,说明你基础很OK! 2023-09-14
- 最好用的ios数据恢复软件:PhoneRescue for Mac 2023-09-14
- Android MaterialButton使用实例详解(告别shape、selector) 2023-06-16
- iOS 对当前webView进行截屏的方法 2023-03-01
- 详解flutter engine 那些没被释放的东西 2022-12-04
- Android实现监听音量的变化 2023-03-30
