【发布时间】:2011-10-26 13:40:42
【问题描述】:
我当前项目的 UITableViewCell 行为让我感到困惑。我有一个相当简单的 UITableViewCell 子类。它向基本视图添加了一些额外的元素(通过[self.contentView addSubview:...] 并在元素上设置背景颜色,使它们看起来像黑色和灰色的矩形框。
因为整个表格的背景都有这种混凝土般的纹理图像,所以每个单元格的背景都需要是透明的,即使在被选中时也是如此,但在这种情况下,它应该变暗一点。我已经设置了一个自定义的半透明选定背景来实现这个效果:
UIView *background = [[[UIView alloc] initWithFrame:self.bounds] autorelease];
background.backgroundColor = [[UIColor blackColor] colorWithAlphaComponent:0.6];
background.opaque = NO;
[self setSelectedBackgroundView:background];
虽然这会产生正确的背景外观,但当我选择单元格时会发生奇怪的副作用;所有其他背景都以某种方式关闭。这是一个屏幕截图。底部单元格看起来应该并且未被选中。顶部的单元格被选中,但它应该显示黑色和灰色的矩形区域,但它们已经消失了!
谁知道这里发生了什么,更重要的是:我该如何纠正这个问题?
【问题讨论】:
-
我知道一种解决方案是摆脱所有子视图并在 drawRect: 方法中“手动”绘制所有内容,但这不是一个选项,因为类现在依赖于这种机制。
-
好建议,@ms83,但最终结果完全一样,只是现在背景上有一张图片。仍然所有其他背景“消失”。并不是它们也被设置为那个背景,因为这样多个透明视图应该堆叠起来并且仍然可见,即使是以非预期的方式。
-
这听起来像是一个缓存问题。也许创建两个 CellIdentifiers,一个用于选定的单元格,另一个用于未选定的单元格。根据需要初始化任一类型的单元格和出队。
-
嗨@Wolfgang,我不太明白你的意思。您在图像中看到的只是同一个单元格的选定状态和常规状态。选择是由于我在截屏时按住鼠标按钮(模拟器)。同样的事情发生在设备上。
标签: objective-c cocoa-touch uitableview subclassing