UITableViewCell中cell重用机制导致内容重复的方法

   UITableView继承自UIScrollview,是苹果为我们封装好的一个基于scroll的控件。上面主要是一个个的UITableViewCell,可以让UITableViewCell响应一些点击事件,也可以在UITableViewCell中加入UITextField或者UITextView等子视图,使得可以在cell上进行文字编辑。

   UITableView中的cell可以有很多,一般会通过重用cell来达到节省内存的目的:通过为每个cell指定一个重用标识符(reuseIdentifier),即指定了单元格的种类,当cell滚出屏幕时,会将滚出屏幕的单元格放入重用的queue中,当某个未在屏幕上的单元格要显示的时候,就从这个queue中取出单元格进行重用。

   但对于多变的自定义cell,有时这种重用机制会出错。比如,当一个cell含有一个UITextField的子类并被放在重用queue中以待重用,这时如果一个未包含任何子视图的cell要显示在屏幕上,就会取出并使用这个重用的cell显示在无任何子视图的cell中,这时候就会出错。

   解决方法:

方法一:

  将获得cell的方法从- (UITableViewCell*)dequeueReusableCellWithIdentifier:(NSString*)identifier 换为-(UITableViewCell *)cellForRowAtIndexPath:(NSIndexPath *)indexPath

  重用机制调用的就是dequeueReusableCellWithIdentifier这个方法,方法的意思就是“出列可重用的cell”,因而只要将它换为cellForRowAtIndexPath(只从要更新的cell的那一行取出cell),就可以不使用重用机制,因而问题就可以得到解决,虽然可能会浪费一些空间。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *CellIdentifier = @"Cell";// UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];//改为以下的方法//根据indexPath准确地取出一行,而不是从cell重用队列中取出UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}//...其他代码
}

方法二: 通过为每个cell指定不同的重用标识符(reuseIdentifier)来解决

  重用机制是根据相同的标识符来重用cell的,标识符不同的cell不能彼此重用。于是我们将每个cell的标识符都设置为不同,就可以避免不同cell重用的问题了。

  

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{//以indexPath来唯一确定cellNSString *CellIdentifier = [NSString stringWithFormat:@"Cell%d%d", [indexPath section], [indexPath row]];//出列可重用的cellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}//...其他代码
}

方法三: 删除重用cell的所有子视图

  这个方法是通过删除重用的cell的所有子视图,从而得到一个没有特殊格式的cell,供其他cell重用。

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{static NSString *CellIdentifier = @"Cell";//出列可重用的cellUITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];if (cell == nil) {cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier];}else{//删除cell的所有子视图while ([cell.contentView.subviews lastObject] != nil){[(UIView*)[cell.contentView.subviews lastObject] removeFromSuperview];}}//...其他代码
}

方法三我试着好像有些问题,具体怎么弄正在研究,

转载于:https://www.cnblogs.com/anyezhuixing/p/4206392.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/257805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

高级会计师计算机考试中级,会计师需要计算机等级考试吗

尘伴考证达人06-19TA获得超过671个赞[color#000][font宋体][size3][alignleft]广东省高级会计师评审职称外语,执行《关于调整完善我省职称外语政策的通知》(粤人发〔2018〕120号)[/align][alignleft]三、报考职称外语考试的等级要求[b][size3](一)申报高教、科研、卫…

一 手游开发工具cocos2d-x editor初识

可学习的demo: 7个实战项目 flappybird(飞扬小鸟)、popstar(消灭星星)、fruitninja(水果忍者)、2048(数度消除)。 moonwarriors(月亮战神)、frui…

Provisioning Services 7.6 入门到精通系列之七:创建虚拟磁盘

在上一章节完成了主目标设备的准备,今天将揭晓如何通过映像向导创建虚拟磁盘。1.1 点击开始菜单”映像向导”1.2 在映像向导点击”下一步“1.3 输入PVS服务器信息,下一步1.4 点击”新建虚拟磁盘”1.5 输入新虚拟磁盘的相关信息,下一步1.6 配置…

在使用多表的查询显示的时候 建议使用视图

如果没有查询只是需要第一次显示的话用linq表达式就可以了,如果还涉及到查询的话,linq表达式就很麻烦了,我还不会。所以我们用视图做查询就方便很多了。转载于:https://www.cnblogs.com/woshijishu3/p/4207567.html

大型网站技术架构03

永无止境:网站的伸缩性架构 1. 所谓网站的伸缩性是指不需要改变网站的软硬件设计,仅仅通过改变部署的服务器数量就可以扩大或者缩小网站的服务能力。 2. 网站架构的伸缩性设计: 1). 不同功能进行物理分离实现伸缩性:通过增加服务器…

全国职业院校技能大赛软件测试题目,我校喜获2018全国职业院校技能大赛“软件测试”赛项一等奖...

九江职院新闻网讯(信息工程学院)5月31日,从2018全国职业院校技能大赛传来喜讯,由我校信息工程学院教师艾迪、朱虎平指导,学生郭星宏、赖闽、吴宗霖组成的竞赛团队,代表江西省在高职组“软件测试”赛项中荣获团体一等奖的佳绩。为积…

两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] = a[0]*a[1]*a[2]…*a[N-1]/a[i];...

转自:http://blog.csdn.net/shandianling/article/details/8785269 问题描述:两个数组a[N],b[N],其中A[N]的各个元素值已知,现给b[i]赋值,b[i] a[0]*a[1]*a[2]…*a[N-1]/a[i]; 要求&#xff1a…

protobuf---messge嵌套get set

package test_namespace;message ChildMsg {optional string child 1; }message FatherMsg {optional string father 1; optional ChildMsg child_msg 2; } 或者 message FatherMsg {optional string father 1; message ChildMsg {optional string child 1;}optiona…

南方科技大学计算机交换生,国际合作 – 合作交流分类 – 南方科技大学生物医学工程系...

2019年秋季学期本科生赴麻省理工交流学习项目申请须知本项目是根据南方科技大学与麻省理工签订的合作协议,约定我校每年将选派不超过6名学生前往麻省理工学院进行为期一年的交流学习,学生仅可在机械工程系内选择课程。本批次将选拔优秀本科生于2019-2010…

利用VOIP电话通信服务,他骗得18亿美元

VoIP电话服务公司TelexFree的CEO詹姆斯梅里尔承认他的公司是一个不折不扣的,拥有18亿美元金字塔式的旁氏骗局公司。 没想到VOIP技术也能成为诈骗犯罪的“工具” 本周一,在美国马萨诸塞州的一个地方法院,詹姆斯梅里尔被认定有罪。并具有九项罪…

无锁的环形队列

#ifndef _RingQueue_H_ #define _RingQueue_H_ #include <memory.h> template<class T, unsigned int MAX_LEN 1024> class RingQueue { public://-----------------------------------------------------// 构造//---------------------------------------------…

三相滤波器怎么接线_单相电机和三相电机怎么接线?为什么三相电机有3或6个接线柱?...

于电机接线柱的链接方法&#xff0c;下面整理了从单相和三相的接法及三个接线柱和六个接线柱的区别等知识&#xff0c;跟各位电工朋友分享&#xff0c;希望在实际操作中能帮到各位。单相电机一般是指用单相交流电源(AC220V)供电的小功率单相异步电动机。这种电机通常在定子上有…

天文望远镜(四)

买天文望远镜有段日子了&#xff0c;除了第一天到货时带着儿子体验了一回&#xff0c;后来由于接连雾霾&#xff0c;基本成了装饰。 儿子在这期间也提出要用望远镜&#xff0c;但都没有找到合适的机会&#xff0c;说到底还是有些主观原因。 昨天周末空气质量不错&#xff0c;站…

360计算机报名支付不了,为什么我的电脑使用360浏览器后无法登陆网...

2018-07-25 15:59龚崇松 客户经理若您在密码、验证码输入框遇到红色的小叉子等&#xff0c;则说明您的浏览器未成功下载我行的ActiveX安全控件&#xff0c;请您进行以下操作&#xff1a; (1)登录工行门户网站&#xff1b;(2)点击“个人网上银行登录”下方的“安装”。进入下一个…

Android源码编译全过程记录(基于最新安卓5.1.0)【转】

本文转载自&#xff1a;http://blog.csdn.net/drg1612/article/details/44802533 我的编译条件&#xff1a; 1 Ubuntu Kylin 14.04 长期支持版 下载地址 &#xff1a; http://www.ubuntu-china.cn/download 2 我的电脑是联想G470 i3处理器 内存4G&#xff0c;120g固体硬盘&…

第三方登录接入-qq,weibo-java

开发之前 需求&#xff1a;网站接入qq,sina微博登录&#xff0c;本文最后付效果图&#xff1a; 说明&#xff1a;大部分网站本身是需要用户概念的&#xff0c;很多操作依附于用户&#xff0c;而qq或微博作为一种登录方式指向用户而已&#xff0c;我参考了一下其他网站的做法&am…

python替换img的路径为新的路径_以“五智”为核心 南宁电信打造5G时代数字家庭新路径...

来源&#xff1a;通信信息报本报讯(特约记者 许辉坚)近日&#xff0c;中国电信广西南宁分公司在协助广西自治区通信管理局主办的“电信用户委员会体验活动”中&#xff0c;以发挥用户委员会的平台和纽带作用&#xff0c;促进持续改善电信服务质量为主题&#xff0c;以“五智”能…

0118——RTLabel和正则表达式

RTLabel和RegexKitLite都要导入第三方库 使用Regexkitlite库进行正则表达式的解析 1.库是使用MRR&#xff0c;如果在ARC工程里面使用这个类&#xff0c;必须在project->build phases->compile resources里面将regexKitLite.m的编译指令设为&#xff1a;-fno-objc-arc 2.需…

热带雨林绘画软件测试,儿童画教程|色彩练习与思维创想——好热闹的热带雨林!...

课程类型综合创意绘画课程参考课时90分钟工具材料勾线笔、水彩笔、卡纸课程构思小朋友们知道吗&#xff1f;热带雨林是地球上抵抗力和稳定性最高的生态系统&#xff0c;常年气候非常的炎热&#xff0c;雨量充沛&#xff0c;没有明显的季节差异&#xff0c;生物群落演替速度极快…

对于一个IE8兼容性问题的反思

近期做了一个需求&#xff0c;功能非常easy&#xff0c;把用户的优惠券数量读取出来&#xff0c;然后显示到“用户中心”上。开发完毕后。别的浏览器正常。可是到IE8上就不行了。并且&#xff0c;按下F12之后&#xff0c;就又能够载入出来了。首先&#xff0c;找了前端人员&…