我有一个自定义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:]方法确实具有防止蓝色梯度选择背景的所希望的效果,但是,似乎非常janky
覆盖 - [UITableViewCell setSelected:animated:]为无操作.这不具有防止蓝色渐变选择背景的期望效果
我有一个基本的UITableView,我想在没有选择样式的情况下启用Mail.app样式复选标记.我有以下代码段:
#define UITableViewCellEditingStyleMultiSelect (3)
- (UITableViewCellEditingStyle)tableView:(UITableView *)tableView
editingStyleForRowAtIndexPath:(NSIndexPath *)indexPath
{
return UITableViewCellEditingStyleMultiSelect;
}
- (UITableViewCell *)tableView:(UITableView *)tableView
cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
UITableViewCell *cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:nil];
cell.selectionStyle = UITableViewCellSelectionStyleNone;
return cell;
}
Run Code Online (Sandbox Code Playgroud)
但是,这将永远不会在选择上显示复选标记(尽管显示空心圆圈).关于如何修复它的任何想法?我知道它使用了未记录的功能,但我真的想添加对复选标记的支持.我的实际例子使用非常自定义UITableViewCell,我无法启用选择样式!
