将UITableViewCell的selectedBackgroundView设置为按下图片的状态,同时不支持多选的情况下,遇到如下问题:

如果默认第一个cell处于selected状态,然后再点击其他的cell并不抬起(可以是长按操作),然后关闭当前的TableView,在通过其他操作之显示(每次显示的的时候,都会默认第一cell选中),就会出现之前长按的cell还是处于选中状态,此时虽然UITableView不支持多行选择,不甚明了,查阅资料发现:

具体参考: http://www.itniwo.net/blog/v/298475.html

查看UITableViewCell的帮助文档我们可以看到它有两个属性highLighted、selected。这两者之间到底又怎么样的联系呢?当我们点击cell的时候都发生了什么呢?要达到这个目的,很简单我们只要自定义一个cell继承自UITableViewCell,然后重载它的以下两个方法:

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated;

- (void)setSelected:(BOOL)selected animated:(BOOL)animated;

这两个方法一个是设置cell的高亮状态,另一个是设置cell的选中状态,我们只需要在这两个方法里面打印信息就可以看出点击cell时这些状态是怎么变化的了。当我们点击cell的时候,其实是先设置cell的高亮状态为YES,然后松手的时候再将cell的高亮状态设置为NO,接着才是设置cell的选中状态为YES,最后才会去调用delegate中的tableview:didSelectRowAtIndexPath:方法。

由此可见:cell的高亮状态是不能持久的,即tap的时候会变成高亮,松手的时候就会自动设置为非高亮状态。而cell的选中状态则是可以持久的,我们不去触发它改变状态,则选中状态就不会

所以自己遇到问题应该是:当cell被长按处于highlighted=Yes的状态下,隐藏或者关闭tableView会导致此状态始终存在(测试如此,如果有误可能操作或者其他问题,请留言指出),而每次默认显示都会将第一个cell处于selected状态,于是出现两个cell处于选中的图片状态。

刚开始想到的解决方法是:在每次显示tableView的时候,判断可见的cell的highlight状态,如果处于Yes,则调用- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated;将之重置为No,这个可以解决两个cell处于选装的图片情况,但是此时点击任意cell的状态,都会将刚才设置cell的highlight为No的cell,重新设置为selected状态,自己初步猜测是:app存储了此highlight和selected的对应状态,再次点击时,会继续刚才的cell的highlight动作结束,开始selected状态,所以总是会高亮之前的cell,此问题不知如何解决。

后来发现一个简易的方法:在每次重新显示UITableView的时候,可以调用一下reloadData,然后在初始化第一个cell的selected状态,就不会有之前的问题。

所以:UITableView reloadData 方法自己会初始化所有的data,以及他们的状态。

最新文章

  1. C语言 · 矩形面积交
  2. HTTP权威指南-基础知识
  3. MVC4 学习备忘
  4. Android中的Activity相关知识总结
  5. 为 Xamarin.Forms 做个跑马灯控件
  6. 正则表达式 之 C#后台应用
  7. ios>android>javaee
  8. 常用网站--前端开发类+网页设计类+平面素材类+flash类
  9. Optimistic and Pessimistic locking
  10. Jquery AJAX POST与GET之间的区别
  11. [Windows Azure] 使用 Windows Azure 快速搭建 Redis 服务器
  12. JavaScript高级内容:原型链、继承、执行上下文、作用域链、闭包
  13. 强大的API测试工具Hitchhiker v0.9 基于UI的断言测试,回顾2017
  14. FFT & FNT 简要整理
  15. 解决ie6中png图片格式不兼容问题
  16. shell中的>,2>&1,&>file 解析记录
  17. 「TJOI2015」旅游 解题报告
  18. Java Heap Dump On OutOfMemoryError
  19. 五个免费UML建模工具
  20. 基于IOS上MDM技术相关资料整理及汇总

热门文章

  1. springboot 使用c3p0数据库连接池的方法
  2. Google Protocol Buffer 的使用
  3. Oracle数据库中SYS、SYSTEM、DBSNMP、SYSMAN四用户的区别
  4. webstorm 2016 激活(转)
  5. sql一个表中两个字段合并求和
  6. jquery api
  7. appium远程调用appium server
  8. pdo 事物的处理
  9. c# NPOI 导出EXCEL
  10. SpringRMI远程方法调用