我有一个自定义的UITableViewCell子类.我已经将我的cell子类的contentView设置为

此外,我设置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:]方法does中的设置cell.selectionBackgroundView = nil具有防止蓝色渐变 Select 背景的预期效果,但这似乎非常刺耳

  4. 覆盖-[UITableViewCell setSelected:animated:]为禁止操作.这不会产生阻止蓝色渐变 Select 背景的预期效果

推荐答案

马特·加拉赫(Matt Gallagher)在定制UtableView方面提供了this post个优秀资源.您需要做的是将selectedBackgroundView设置为透明或UIImageView的新视图(而不是nil).

Objective-c相关问答推荐

为何在Objective-C中,使用self.propName赋值会导致崩溃而使用_ivarName则不会?

viewWillAppear,viewDidAppear 没有被调用,没有触发

如何使用 UIStepper

如何打印 NSMutableURLRequest?

如何向 UILabel 添加滚动功能

如何正确获取文件大小并将其转换为 Cocoa 中的 MB、GB?

如何编写 Objective-C 完成块

Container View 好像有 UINavigationBar 一样被下推?

如何编写 OS X Finder 插件

如何将@selector 作为参数传递?

获取包含在 NSString 中的文件的扩展名

UITableViewCell 右侧有图像?

如何从设置屏幕打开位置服务屏幕?

既然我正在使用 Core Data,如何对我的模型进行单元测试?

检测平移手势结束

command/usr/bin/codedesign 失败,退出代码 1-代码符号错误

有没有办法在不使用 UINavigationController 的情况下更改 Storyboard 中 UINavigationBar 的高度?

如何删除 UIToolBar 上的顶部边框

ld:找不到文件:链接器命令失败,退出代码为 1

无法从其 DataSource 获取单元格