这篇文章主要给大家介绍了关于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列表上拉(平滑加载数据)自动加载数据的问题解决
基础教程推荐
- 解决Android Studio突然不显示logcat日志的问题 2023-02-04
- Flutter绘图组件之CustomPaint使用详解 2023-05-12
- IOS 播放系统提示音使用总结(AudioToolbox) 2023-03-01
- IOS应用内跳转系统设置相关界面的方法 2022-11-20
- Android多返回栈技术 2023-04-15
- Flutter手势密码的实现示例(附demo) 2023-04-11
- Android开发使用RecyclerView添加点击事件实例详解 2023-06-15
- android studio按钮监听的5种方法实例详解 2023-01-12
- iOS开发教程之XLForm的基本使用方法 2023-05-01
- Android中的webview监听每次URL变化实例 2023-01-23
