UITableViewCell:如何防止蓝色select​​背景没有博客isSelected属性?

我有一个自定义的UITableViewCell子类。 我已经将我的单元格子类的contentView设置为一个自定义的UIView类,其中我重写-drawRect:并在那里做所有的绘图。

此外,我设置cell.contentView.opaque = NO为了实现透明度在某些细胞的区域(不幸的是,表背后的背景图像必须显示通过每个细胞在某些部分达到风格的效果,我知道这是性能受到打击,这一定是如此)。

问题:当我选中或突出显示(正在按下)时,仍然会看到默认的漂亮的蓝色渐变背景(在透明区域中)。 这掩盖了桌子背后的形象,这是不好的。

目标:为了防止出现蓝色渐变背景,但仍然能够从-[MyContentView drawRect:]内部检查cell.isSelectedcell.isHighlighted属性,以确定如何绘制自己的自定义select/突出显示。

我试过了:

  1. 设置cell.selectionStyle = UITableViewCellSelectionStyleNone有防止美丽的蓝色渐变select背景的预期效果,但也阻止了cell.isSelectedcell.isHighlighted属性被正确设置,这意味着我不能做我自己的自定义select/高光绘图

  2. 在单元格的-init-prepareForReuse方法中设置cell.selectionBackgroundView = nilcell.backgroundView = nil不会阻止蓝色渐变select背景

  3. -[MyContentView -drawRect:]方法设置cell.selectionBackgroundView = nil 确实具有防止蓝色渐变select背景的预期效果,但是这看起来非常难看

  4. 覆盖 – [UITableViewCell setSelected:animated:]是一个无操作。 这并不具有防止蓝色渐变select背景的预期效果

Matt Gallagher在这篇文章中提供了一个很好的定制UITableView的资源。 你想要做的是将selectedBackgroundView设置为一个新的视图(而不是nil),它是透明的或UIImageView。

您还必须覆盖setHighlighted:以防止蓝色渐变显示。 如果你只是重写setHighlighted:那么你最终会有一个短暂的select效果。

所以你会有这两个方法:

 - (void)setHighlighted: (BOOL)highlighted animated: (BOOL)animated { // don't highlight } - (void)setSelected: (BOOL)selected animated: (BOOL)animated { // don't select //[super setSelected:selected animated:animated]; } 
 cell.selectionStyle = UITableViewCellSelectionStyleNone; 

到目前为止,更简单的方法 – 在我看来,要实现这一点,通过在界面生成器屏幕上设置表格视图属性checkbox,在其中显示“触摸显示select”。 看下面的截图:

在这里输入图像说明

过去为我工作的只是把:

 - (void)setSelected:(BOOL)selected animated:(BOOL)animated { } 

在我的UITableViewCell子类(因为它不会调用超级,使自己突出显示)。 希望这是你正在寻找的。

这个怎么样?

 // disable user interaction cell.userInteractionEnabled = NO;