【iOS开发】解决 UITableview 中选中 Cell 后,Cell 复用导致选中状态消失、应用闪退的问题-阿里云开发者社区

开发者社区> kyxu> 正文

【iOS开发】解决 UITableview 中选中 Cell 后,Cell 复用导致选中状态消失、应用闪退的问题

简介: 如图,是一个可以多项选择的 UITableview,但是因为 iOS 的 Cell 复用机制,即下面的 reuseIdentifier 部分 let cell:UITableViewCell=UITableViewCell(style:UITableViewCellStyle.
+关注继续查看

如图,是一个可以多项选择的 UITableview,但是因为 iOS 的 Cell 复用机制,即下面的 reuseIdentifier 部分

let cell:UITableViewCell=UITableViewCell(style:UITableViewCellStyle.Subtitle, reuseIdentifier:"发型cell")

导致 UITableViewCell 的 UITableViewCellAccessoryType,在点选之后可以更改为 Checkmark状态,但是当页面滚动至不可见某个Cell,再滚动回来时,Cell 的 Checkmark状态消失了。


如图,selectCell的状态可以即时更改,选中 或 取消选中,但是这只是改变了界面,并没有改变数据源。

当页面滑动时,我们标记为Checkmark的Cell会被复用,从而丢失这个状态。

所以我采用了NSMutableSet用来存储Cell的 indexPath,从而便于之后 cellForRowAtIndexPath 方法中按照NSMutableSet中的内容,来将之前选择过的 Cell 标记 Checkmark(打勾)

需要注意的是,一开始我采用了Array(不是NSArray)来存储indexPath,用Array的removeAtIndex和append来移除、加入数据,

但是莫名其妙地产生了一些不好的影响:

        因为你总是需要遍历数组来在 cellForRowAtIndexPath 方法中,查看哪些cell是应该被选中过的,然后改成Checkmark状态;

        结果就可能会产生数组越界、App崩溃,以及错误的indexPath被append进数组的情况。

而NSMutableSet的功能更适合这种情况:它有addObject、removeObject、containsObject三个方法。

在 cellForRow 方法中,不需要for循环可以三行代码给cell加Checkmark标记。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏
Android开发学习之使用Toolbar实现不同的Fragment使用不同颜色的标题栏与状态栏                                            先看效果图。
2297 0
iOS Abort问题系统性解决方案
本文将针对iOS客户端的Abort问题,进行根因定位分析,并提出系统性解决方案。
4483 0
TCP的几个状态对于我们分析所起的作用SYN, FIN, ACK, PSH,
TCP的几个状态对于我们分析所起的作用。 在TCP层,有个FLAGS字段,这个字段有以下几个标识:SYN, FIN, ACK, PSH, RST, URG. 其中,对 于我们日常的分析有用的就是前面的五个字段。
627 0
iOS网络编程-解决iCloud文档存储过程中文档冲突问题
<p>iCloud文档在保存的过程中难免会发生冲突,我们必须要有一套解决冲突的策略。策略的采用要根据用户的需求而定,有的简单有的复杂,最简单的是直接使用当前版本覆盖冲突版本。复杂的策略,例如:如果是两个文本文件冲突,可以将两个冲突点列出来,让用户来判断再进行保存。</p> <p><span id="more-131"></span></p> <p>我们采用的策略是使用当前版本覆盖以前的版本。解
1289 0
ScrollView属性fillViewport解决android布局不能撑满全屏的问题
转:http://blog.sina.com.cn/s/blog_6cf2ea6a0102v61f.html   开发项目中遇到一个问题,布局高度在某些国产酷派小屏幕手机上高度不够全部显示,于是使用了ScrollView嵌套LinearLayout,但问题又出现了,在大屏幕手机如三星note3手机上下面会留白,问题的解决办法是在第一层LinearLayout里面嵌套多个LinearLayout,最重要的是将ScrollView中android:fillViewport设置为true。
1405 0
HaaS100开发调试系列 之 定位AliOS Things内存及Crash问题
本文主要说开发调试过程中经常遇到的内存问题。
77 0
+关注
kyxu
近四年独立开发经验,在 App Store 发布过 17 款独立开发作品,作品被 App Store 官方多次推荐,App 总销量已经超过 56w。公众号:KyXuIndie
71
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
《2021云上架构与运维峰会演讲合集》
立即下载
《零基础CSS入门教程》
立即下载
《零基础HTML入门教程》
立即下载