正常的列表下拉请求第一页,上拉加载更多。而聊天对话中的 UITableView 与正常列表是有区别的,都是默认显示最新的对话,下拉请求更多。下拉后要处理数据源的反向拼接和定位滚动的位置。

数据源拼接操作不当,就会出现数据错乱。而定位滚动如果处理不当,会出现界面闪动,定位不准确的问题。

这里就按照微信的聊天下拉效果,写下代码实现:

假设网络请求,获取到数据 responeData 数组:

一、数据拼接。

//先把新的数据添加到数组tempDataArray里
NSMutableArray *tempDataArray = [NSMutableArray array];
[tempDataArray addObjectsFromArray:responeData];//把数据源中已经存在的数据再次加入tempDataArray。
if (self.model.dataSource.count) {[tempDataArray addObjectsFromArray:self.model.dataSource];
}//把总的数据重新赋值给模型
self.model.dataSource = tempDataArray;

二、滚动定位。

int pageNum = 15;//这个就是你请求列表数据所设置的每页的数量。//区分是否为第一次请求
//不是第一次请求
if (self.model.dataSource.count > pageNum) {//根据当前请求的数据的个数,找到indexPathNSIndexPath *indexPath = [NSIndexPath indexPathForRow:responeData.count inSection:0];//先刷新 tableView,再次执行 scrollTo 方法 这点很重要。//注意 UITableViewScrollPositionTop 参数的设置[self.tableView reloadData];[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionTop animated:NO];
}else{//如果是第一个请求,默认滚动到最底部, 注意容错处理。[self.tableView reloadData];[self tableViewScrollToBottom];
}

滚动到底部

- (void)tableViewScrollToBottom
{if (self.model.dataSource.count==0) { return; }NSIndexPath *indexPath = [NSIndexPath indexPathForRow:self.model.dataSource.count-1 inSection:0];[self.tableView scrollToRowAtIndexPath:indexPath atScrollPosition:UITableViewScrollPositionBottom animated:NO];
}

这样,就能和微信聊天界面下拉一样达到一样的流畅效果了。

UITableView 聊天界面顺滑下拉刷新的技巧相关推荐

  1. 【原创】窥视懒人的秘密---android下拉刷新开启手势的新纪元

    小飒的成长史原创作品:窥视懒人的秘密---android下拉刷新开启手势的新纪元转载请注明出处 **************************************************** ...

  2. Android自定义控制(五)仿新浪微博的下拉刷新

    网上有很多很有名的开源框架,这里就来拉拉PullToRefresh这个框架,也就是我们平时用的下拉刷新啦,当然你问我这个有什么用啊?别人已经写好了,这里主要是学习以及练习,练习的次数多了,一切就顺其自 ...

  3. 自定义控件:下拉刷新

    PullToRefresh 下拉刷新 上拉加载 掌握自定义的具有下拉刷新和上拉加载功能的 ListView 掌握自定义的侧边栏 SlidingMenu 在日常开发工作中,应用界面常常都是用ListVi ...

  4. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能 (转)

    转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9255575 最 近项目中需要用到ListView下拉刷新的功能,一开始想图省事,在 ...

  5. Android下拉刷新完全解析,教你如何一分钟实现下拉刷新功能

    在这个布局中,我们包含了一个下拉指示箭头,一个下拉状态文字提示,和一个上次更新的时间.当然,还有一个隐藏的旋转进度条,只有正在刷新的时候我们才会将它显示出来. 布局中所有引用的字符串我们都放在 str ...

  6. 下拉刷新和UITableView的section headerView冲突的原因分析与解决方案

    UITableView:下拉刷新和上拉加载更多 [转载请注明出处] 本文将说明具有多个section的UITableView在使用下拉刷新机制时会遇到的问题及其解决方案. 工程地址在帖子最下方,只需要 ...

  7. 探索SwipeRefreshLayout配合自定义ListView完成下拉刷新、滑到底部自动加载更多

    在Android开发过程中经常需要实现上下拉刷新功能,Google推出的下拉刷新控件SwipeRefreshLayout(彩虹条),由于官方版本只有下拉刷新而没有上拉加载更多的功能,很多人也尝试在这个 ...

  8. 使用Vant框架的组件van-pull-refresh搭配van-list和van-card完成上滑加载更多列表数据,下拉刷新当前列表数据(等同于翻页功能)

    <template><div class="sg-page-body"><div class="sg-list"><v ...

  9. php微信小程序向下滑动,微信小程序功能实现:上滑加载下拉刷新

    本篇文章给大家带来的内容是关于微信小程序功能实现:上滑加载下拉刷新,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. 之前谈到文章列表的数据加载,是一次性全部加载,这样是不友好的.这章介 ...

最新文章

  1. java解码base64的png图片_使用PHP对图片进行base64编码和解码(png、jpg,声音、视频)...
  2. 【Docker从入门到精通_1】Ubuntu16.04版本安装与配置
  3. shell高级编程--引用
  4. Linux下自动检测USB热插拔
  5. azkaban mysql参数_azkaban参数详解
  6. CDOJ--1668
  7. 数据结构 10分钟让你掌握经典排序(一)
  8. 2000-2018年各省能源消费和碳排放数据数据、1997-2017年各省地级市县区碳排放数、各国二氧化碳排放量(人均公吨数)1960-2014年、二氧化碳排放量、各省市碳排放权额分配实施方案
  9. 直播视频网站源码,列表的展开更多和点击收起功能
  10. 简直太强,把任意图片设置为鼠标指针
  11. 计算机桌面调音量的图标不见了,如何解决电脑音量图标不见了
  12. 【腾讯软件测试面试经历】一面、二面、HR终面
  13. OTL,OCL,BTL电路的性能特点和差别
  14. 内存管理参数zone_reclaim_mode分析
  15. 计算机专业编程很厉害是怎样的一种体验?
  16. wtc java 代码 tpcall(servicename_[转载]Dorado+Spring+Wtc+Tuxedo开发
  17. 关于《算法的乐趣》历法一章演示程序错误的说明
  18. 企业微信—JS-SDK使用(例:预览文件接口)
  19. 模式识别技术漫谈(2)
  20. 线程进程是怎样使用多核的

热门文章

  1. 用什么软件能从excel数据自动生成word版的环境实验室检测报告
  2. oracle 修改nls_nchar_characterset,NLS_NCHAR_CHARACTERSET 参数值是如何被指定的?
  3. having只用来在group by之后,having不可单独用,必须和group by用。having只能对group by的结果进行操作...
  4. android的byte转int
  5. 微信公众号接口调用频次限制说明
  6. Linux 配置和安装Oracle DG时遇到的报错及解决方案
  7. 电脑技巧:分享六个背景音乐素材下载网站,值得收藏
  8. 关于%02d %.10d %2d %.01f的值的区别
  9. app联调出现java.lang.SecurityException问题的解决方法
  10. idea激活码激活教程