UITableViewCell
今天遇到一个有关UITableViewCell
的奇怪现象。
我的UITableViewCell
上有一个subview
,是用来显示未读数的。我给这个subview
设置了一个红色背景,就像这样:
但是我选中这个cell时,发现未读数的背景色没有了,只有数字,就像这样:
image借此机会我了解到我们通常点击一个UITableViewCell
时发生了哪些事,我按照调用方法的顺序绘制了一个简单的流程图:
可以看到,手指按下的时候,Cell就进入highlighted
状态。其实,Cell的subview
也同时进入了highlighted
状态。这个时候,Cell会把所有所有subview
的背景色清空,以便设置统一的背景色。一般有如下几种选中模式:
UITableViewCellSelectionStyleNone,
UITableViewCellSelectionStyleBlue,
UITableViewCellSelectionStyleGray,
UITableViewCellSelectionStyleDefault
解决办法
我们可以选择UITableViewCellSelectionStyleNone,背景色就不会修改的。但是显然不能满足我们的应用场景。
正如Apple开发文档说的:
A custom table cell may override this method to make any transitory appearance changes.
我们重载(void)setSelected:(BOOL)selected animated:(BOOL)animated
和(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
方法,在这里面我们来设置subview
的背景色。
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
[super setSelected:selected animated:animated];
_unreadBadge.backgroundColor = [UIColor redColor];
}
- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
[super setHighlighted:highlighted animated:animated];
_unreadBadge.backgroundColor = [UIColor redColor];
}
这样既可以按照系统的选择风格来,又可以自定义subview
背景色,perfect!