我当前项目的 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];
尽管这会产生正确的背景外观,但当我选择单元格时会发生奇怪的副作用;所有其他背景都以某种方式转变off。这是一个屏幕截图。底部单元格看起来应该是,但没有被选中。顶部单元格被选中,但它应该显示黑色和灰色的矩形区域,但它们消失了!
谁知道这里发生了什么,甚至更重要的是:我该如何纠正这个问题?
发生的情况是 TableViewCell 内的每个子视图都将接收 setSelected 和 setHighlighted 方法。 setSelected 方法将删除背景颜色,但如果您将其设置为选定状态,它将被更正。
例如,如果这些 UILabel 作为子视图添加到您的自定义单元格中,那么您可以将其添加到 TableViewCell 实现代码的 setSelected 方法中:
- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
[super setSelected:selected animated:animated];
self.textLabel.backgroundColor = [UIColor blackColor];
}
其中 self.textLabel 将是上图中显示的任何标签
我不确定您在哪里添加所选视图,我通常将其添加到 setSelected 方法中。
或者,您可以子类化 UILabel 并重写 setHighlighted 方法,如下所示:
-(void)setHighlighted:(BOOL)highlighted
{
[self setBackgroundColor:[UIColor blackColor]];
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)