在开始之前先上一张效果图

相信大家都看到了“店铺优惠”这一栏,在这里假设这一栏就是单独的一个cell,当无店铺优惠的时候不可点击在有店铺优惠的时候会弹出优惠列表,选中并返回时会刷新数据,所以弹出视图采用的是懒加载的方式,而且刷新页面的方式采用的不是 tableView 的 reloadData 来刷新整个列表而是采用刷新单行的方式 reloadRowsAtIndexPaths: withRowAnimation:

然而令我惊呆的事情出现了,在存在店铺优惠多次点击弹出框的时候本来选中的优惠列表里面的选中数据居然发生了变化,导致返回来的数据也在不断地改变,本来是一次愉快的选择却发生了这么不可预测的事情,思前想后也没找到问题的所在,最后不得不在这个刷新方式上试着看能不能找到问题

事情果然不出我的所料在懒加载弹出框视图的时候居然创建了两次,不多不少,就是两次,于是我就在想肯定是复用的地方出问题了,但是看了代码并没有觉的有什么问题,但是也习惯性的打了个断点看看到底是怎么走的,然而事情的发展超出了预料的结果,在cell已经创建过的前提下在刷新的时候居然又创建了一个新的cell,于是狠下心来将刷新方法换成 reloadData ,这次就没有问题了,最后确定了还是 reloadRowsAtIndexPaths: withRowAnimation: 搞的鬼

查阅了资料以后得知 reloadRowsAtIndexPaths: withRowAnimation: 在刷新的时候会有cell进入和移出的动画, 所以同时需要至少两个可用的的cell(包括复用池中的cell),而 reloadData 会先将所有cell都先放到复用池中, 然后再从复用池中取可以复用的cell
这下真相大白了

作者:初光夫

tableView刷新中的问题的更多相关文章

  1. iOS tableView刷新

    下面是我对AFN刷新一个简单的封装我们只需要传过去一个tableView就好了 简化了一些代码 #import <Foundation/Foundation.h> typedef NS_E ...

  2. ios开发之--tableview刷新某一个区和某一行

    在开发中,有时候,我们不需要刷新整个表,只需要刷新局部数据即可,具体代码如下: //section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWith ...

  3. TableView刷新指定的cell 或section

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:]; [tableview reloadSections:ind ...

  4. tableview 刷新 @property属性的用法

    1.tableView的刷新1> 数据刷新的总体步骤* 修改模型数据* 刷新表格(刷新界面) 2> 刷新表格(刷新界面)的方法* 全局刷新(每一行都会重新刷新)- (void)reload ...

  5. collectionView/tableview刷新时关闭动画无效

    collectionView/tableview reloadSections/reloaddata时去掉动画无效时可以尝试使用 [UIView performWithoutAnimation:^{ ...

  6. tableview刷新某个区域(section)或者某一行(row)

    //一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithIndex:2]; [tableview reloadSections:in ...

  7. 关于tableView刷新

    UITabelView的局部刷新 1. 刷新整个tableView用[self.tableView reloadData]; 2. [self.tableView reloadRowsAtIndexP ...

  8. TableView刷新 局部刷新等

    1.对整个页面刷新 [ tableView reloadData]; 2.对某一个section刷新 NSIndexSet *indexSet=[[NSIndexSet alloc]initWithI ...

  9. tableView刷新指定的cell 或section和滚动到指定的位置

    转自:http://blog.csdn.net/tianyou_code/article/details/54426494 //一个section刷新 NSIndexSet *indexSet=[[N ...

随机推荐

  1. chrome浏览器 配置开机启动全屏(看板app模式设置)

        chrome浏览器 配置开机启动全屏(看板app模式设置) 1.下载安装chrome浏览器. 2.建立一个chrome浏览器的快键方式,右键打开属性,如下图: 3.将目标选项卡的值修改为:&q ...

  2. robotframework的列表与字典

    这里以Get Element Size为例,Selenium2Library返回的是列表,AppiumLibrary返回的是字典. 列表用 ${width}获取:字典用 &{ui}[width ...

  3. 【android】【android studio】修改emulator的本地化环境

    Changing the emulator locale from the adb shell To change the locale in the emulator by using the ad ...

  4. ubuntu中卸载没有安装完全的软件包

    sudo apt-get autoclean sudo apt-get clean sudo apt-get autoremove

  5. sql 单表/多表查询去除重复记录

    单表distinct 多表group by group by 必须放在 order by 和 limit之前,不然会报错 *************************************** ...

  6. Java-framework-Vaadin

    安装vaadin: (1) 首先试了maven+vaadin. 安装maven: 1. unzip apache-maven-3.3.9-bin.zip 2. modify PATH environm ...

  7. while循环输出的表格

    方法一: <?php echo '<table border="1" width="800" align="center"> ...

  8. CodeForces 570E DP Pig and Palindromes

    题意:给出一个n行m列的字符矩阵,从左上角走到右下角,每次只能往右或者往下走,求一共有多少种走法能得到回文串. 分析: 可以从两头开始考虑,每次只走一样字符的格子,这样得到的两个字符串拼起来之后就是一 ...

  9. python基础学习笔记——反射

    对编程语言比较熟悉的朋友,应该知道“反射”这个机制.Python作为一门动态语言,当然不会缺少这一重要功能.然而,在网络上却很少见到有详细或者深刻的剖析论文.下面结合一个web路由的实例来阐述pyth ...

  10. 【转】LAMP网站架构方案分析【精辟】

    [转]LAMP网站架构方案分析[精辟] http://www.cnblogs.com/mo-beifeng/archive/2011/09/13/2175197.html Xubuntu下LAMP环境 ...