UITableViewCell subview disappears when cell is selected
Contents
很多时候我们 UI 效果上会显示一些小圆圈的圆周或者实心圆以及一些 tag 样式带有五颜六色的 view。可以用 UIImageView
来把切图放上去,也可以用普通的 UIView
画出来,后者明显在美观程度上会更好。比如我们需要在 Cell 上摆放一个小圆
UIView *view = [[UIView alloc] initWithFrame:CGRectMake(20, 20)];
view.cornerRadius = 10.f;
view.layer.masksToBounds = YES;
view.backgroundColor = [UIColor redColor];
[cell.contentView addSubview:view];
类似于图中的小圆圈
如果不加其他处理的话,这样纯画出来的控件就会出现 Cell 被高亮或者被点击选择这种 view 会“消失”的问题。这是因为 Cell 在上述情况下被自动改变 content 里所有 view 的 background color [①][refer]
####0x00
要解决这个问题,必须在 Cell 的 class 里面复写父类的两个方法
- (void)setSelected:(BOOL)selected animated:(BOOL)animated {
UIColor *color = self.view.backgroundColor;//取出 view 的颜色
[super setSelected:selected animated:animated];
if (selected){
self.view.backgroundColor = color;
}
}
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated{
UIColor *color = self.view.backgroundColor;
[super setHighlighted:highlighted animated:animated];
if (highlighted){
self.view.backgroundColor = color;
}
}
成功之后的效果如图
####0x01
另一种方法
把 Cell 的 UITableViewCellSelectionStyle
设置成 UITableViewCellSelectionStyleNone
也是可以的,但是这样相当于直接禁用了 select 高亮效果,操作体验不是特别好不建议使用。
[refer]:http://stackoverflow.com/questions/6745919/uitableviewcell-subview-disappears-when-cell-is-selected