由于时间的问题,就给大家先少说一点有关UITableViewCell的问题,再说如果写的越多,也许会不能消化,那么还是少来点吧!

一起来看看UITableView的最重要的组成部分。

一、UITableViewCell的高亮和选中

当我们打开一个tableView的页面,上面布满了一个个cell,tableview允许我们通过datasource为这些

cell提供数据,通过delegate来控制点击cell时候如何响应。查看UITableViewCell的帮助文档我们可以

看到它有两个属性highLighted、selected。这两者之间到底又怎么样的联系呢?当我们点击cell的时候

都发生了什么呢?要达到这个目的,很简单我们只要自定义一个cell继承自UITableViewCell。

二、然后重载它的以下两个方法

154205167.jpg

这两个方法一个是设置cell的高亮状态,另一个是设置cell的选中状态,我们只需要在这两个方法里面打印信息就可以看出点击cell时这些状态是怎么变化的了。

测试的程序很简单,直接重载了这两个方法,打印设置的选中和高亮的状态。当我们点击任何一个cell的时候,输出如下:

154227543.jpg

我们可以看出,当我们点击cell的时候,其实是先设置cell的高亮状态为YES,然后松手的时候再将cell

的高亮状态设置为NO,接着才是设置cell的选中状态为YES,最后才会去调用delegate中的

tableview:didSelectRowAtIndexPath:方法。

此处我们delegate的tableview:didSelectRowAtIndexPath:方法中只是做了打印(没有遵照设计规范,在

该方法中取消选中),这个时候已经有一个cell处于选中状态时,我们再去点击另外一个cell时,输出如

下:

154247847.jpg

通过截图我们可以看出,前两布还是和第一次点击cell时类似,但是紧接着是首先设置前一个cell为非选中状态,然后在设置当前点击的cell为选中状态,最后再调用delegate的方法。为什么会先取消上一个cell的选中状态呢?因为tableView默认是不支持多选的,我们可以通过设置allowsMultipleSelection为YES来设置支持多选。

总结上面两种情况,我们发现cell的高亮状态是不能持久的,即tap的时候会变成高亮,松手的时候就会自动设置为非高亮状态。而cell的选中状态则是可以持久的,我们不去触发它改变状态,则选中状态就不会改变。

通常cell非选中且非高亮状态时候cell上的字体是黑色的,但是高亮或者选中状态时我们可能希望改变字体的颜色为白色或者其他颜色,这个时候就可以通过重载这两个方法来实现,下面是代码片段,如图:

154326844.jpg

如图所示,左边是正常情况下,右边是选中状态下:

154345563.jpg

如果有说的不对的地方,希望大家能够给我指出来,也欢迎和各位大师一起讨论关于iOS开发方面的知识,还可继续关注我,蓝鸥讲师——张浩!