我有一个自定义的UITableViewCell
子类。我已将我的单元子类的contentView
设置为
一个自定义UIView
类,我在其中覆盖-drawRect:
并在那里完成所有绘图。
另外,我正在设置cell.contentView.opaque = NO
以便在单元格的某些区域实现透明度(不幸的是,桌子后面的背景图像必须通过某些部分显示每个单元格才能达到风格效果。我知道这一点是一个性能损失。必须如此)。
问题:当我选择或突出显示(按下)时,我仍会看到在我的单元格后面(在透明区域中)绘制默认的漂亮蓝色渐变背景。这会遮挡桌子后面的图像,这很糟糕。
目标:要防止出现蓝色渐变背景,但仍能检查cell.isSelected
中的cell.isHighlighted
和-[MyContentView drawRect:]
属性,以确定如何绘制自己的自定义选项/高亮。
我尝试了什么:
设置cell.selectionStyle = UITableViewCellSelectionStyleNone
具有阻止漂亮的蓝色渐变选择背景所需的效果,但也会阻止正确设置cell.isSelected
和cell.isHighlighted
属性,这意味着我无法做我自己的自定义选择/高亮绘图
在单元格的cell.selectionBackgroundView = nil
或cell.backgroundView = nil
方法中设置-init
和-prepareForReuse
不会阻止蓝色渐变选择背景
在cell.selectionBackgroundView = nil
方法 中设置-[MyContentView -drawRect:]
具有阻止蓝色渐变选择背景所需的效果,但这看起来非常笨拙
覆盖 - [UITableViewCell setSelected:animated:]为无操作。这没有阻止蓝色渐变选择背景的预期效果
答案 0 :(得分:68)
您还必须覆盖setHighlighted:以防止蓝色渐变显示。如果您只是覆盖setHighlighted:那么您最终会得到一个瞬间选择效果。
所以你将拥有这两种方法:
- (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];
}
答案 1 :(得分:61)
cell.selectionStyle = UITableViewCellSelectionStyleNone;
答案 2 :(得分:47)
Matt Gallagher提供了一个关于自定义UITableViews的优秀资源this post。你想要做的是将selectedBackgroundView设置为透明或UIImageView的新视图(而不是nil)。
答案 3 :(得分:1)
到目前为止,更简单的方法 - 在我看来 - 实现这一点,是通过在Interface Builder屏幕中设置表视图属性复选框,其中显示“在触摸时显示选择”。请参见下面的屏幕截图:
答案 4 :(得分:-1)
过去对我有用的只是:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated { }
在我的UITableViewCell子类中(因为它不会调用super并使其自身突出显示)。 希望这是你想要的。
答案 5 :(得分:-12)
这个怎么样?
// disable user interaction
cell.userInteractionEnabled = NO;