UITableViewCell的highlighted 和selected 属性1
将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,以及他们的状态。
UITableViewCell的highlighted 和selected 属性1的更多相关文章
- HTML option 标签的 selected 属性
HTML option 标签的 selected 属性 http://www.w3school.com.cn/tags/att_option_selected.asp 1.一般做WEB的时候,Chro ...
- option标签selected="selected"属性失效的问题
要在select标签上面加上autocomplete="off"关闭自动完成,不然浏览器每次刷新后将自动选择上一次关闭时的option,这样默认属性selected="s ...
- 关于option标签的selected属性
当item的dict_id和custSource一样,那么当前的item的name就被选中并显示在页面 如果直接写selected="selected",就等于直接回显这个集合中最 ...
- 【转】关于UItableViewCell的accessoryType属性
转载自:http://blog.csdn.net/kmyhy/article/details/6442351 使用的话,例如: cell.accessoryType = UITableViewCell ...
- HTML <option> 标签的属性:selected ; disabled ; label ; value;
HTML <option> 标签的属性:selected ; disabled ; label ; value; 1. selected="selected" sel ...
- iOS -Swift 3.0 -UIButton属性大全
// // ViewController.swift // Swift-UIButton // // Created by luorende on 16/9/9. // Copyright © ...
- 最新iOS 6 in Xcode4.5新特性——Storyboard和属性自动绑定
最新iOS 6 in Xcode4.5新特性编程之二(上)——Storyboard和属性自动绑定 从Xcode 4.3开始,Storyboard 就是iOS 5和iOS 6中令人兴奋的一个新特性,他将 ...
- UITableView性能优化及手工绘制UITableViewCell
提高表视图的性能 UITableView作为应用中最常用的视图,它的性能优化问题几乎是经常提及.下面对在非网络访问情况下的表视图性能优化进行了主要的几点说明: 1.自定义类或XIB文件时 在系统提供的 ...
- 动态计算UITableViewCell高度
动态计算UITableViewCell高度 UILabel in UITableViewCell Auto Layout - UILabel的属性Lines设为了0表示显示多行.Auto Layout ...
随机推荐
- jQuery div内容间隔1秒动态向上滚动HTML、JS代码
demo1: <!DOCTYPE html> <html> <head> <title>div内容间隔1秒动态滚动</title> < ...
- Java中的自增问题(i=i++)
也许我这是在较真, 但是我们确实有时候就不小心就错写为这种情况了. 看如下代码: public class Test{ public static void main(String[] args){ ...
- DIOCP之DEMO-Echo卡死问题分析
最近很多新朋友在调试echo这个例程时发现,总是卡死客户端或服务器端,这是因为客户端的接收数据用的memo没有处理接受到的行数,导致超过最大行数,而卡死界面,只需要如下操作就可以解决: 引用弦子的:虽 ...
- oricle数据库关于定时
- 关于OPC的研究1]c# opc client源码调试和学习笔记
c# opc client是一个在网上下载的示例程序,调试的时候还是费了一番周折,服务器端程序来自king view6.55,另文介绍. 1.注册dll 程序中有一个名叫OPCDAAuto.dll的文 ...
- centos7 安装jdk7
源码包准备: 首先到官网下载jdk,http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.htm ...
- JQuery Mobile入门——设置后退按钮文字(转)
http://www.tuicool.com/articles/AZnYVz JQuery Mobile入门——设置后退按钮文字 时间 2013-01-09 20:24:28 CSDN博客原文 h ...
- Observer(观察者)-对象行为型模式
1.意图 定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新. 2.别名 依赖(Depenents),发布-订阅(Publish-subscribe ...
- 运行开源项目,报错Error:(48, 37) 错误: -source 1.6 中不支持 diamond 运算符,请使用-source 7或者更高版本已启用diamond运算符
错误定位 当时并没有弄明白为什么会出错,一脸懵逼相 解决办法: 将source compatibility和target compatibility都改为1.7,重新build就ok了. 错误原因: ...
- PHP实现CSV大文件数据导入到MYSQL数据库
<?php $db_host="192.168.1.10"; $db_user="root"; $db_psw="11111"; $d ...