我当前项目的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];

虽然这会产生正确的背景效果,但当我 Select 单元格时,会产生奇怪的副作用;所有其他背景都是off岁.这是一张截图.底部的单元格看起来应该是,但未被选中.顶部单元格已选中,但它应该显示黑色和灰色的矩形区域,但它们已消失!

模拟器的屏幕截图. Select 顶部单元格,不 Select 底部单元格.

谁知道这里发生了什么,更重要的是:我该如何纠正这一点?

推荐答案

现在的情况是,TableViewCell中的每个子视图都将接收setSelected和setHighlighted方法.setSelected方法将删除背景色,但如果将其设置为选定状态,则会进行更正.

例如,如果这些是在自定义单元格中作为子视图添加的UILabel,则可以将其添加到TableViewCell实现代码的setSelected方法中:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated
{
    [super setSelected:selected animated:animated];

    self.textLabel.backgroundColor = [UIColor blackColor];

}

我在哪里.textLabel将是上图中显示的任何标签

我不确定你在哪里添加你 Select 的视图,我通常用setSelected方法添加.

或者,您可以将UILabel子类化,并覆盖setHighlighted方法,如下所示:

-(void)setHighlighted:(BOOL)highlighted
{
    [self setBackgroundColor:[UIColor blackColor]];
}

Objective-c相关问答推荐

将未知数量的行添加到静态单元UITableView

NSError 和 __autoreleasing

UISearchDisplayController 没有结果tableView?

为什么当我使其处于非活动状态时,弱 IBOutlet NSLayoutConstraint 变为 nil?

#if 和 #ifdef Objective-C 预处理器宏有什么区别?

从 NSString 创建 SHA1 哈希

如何判断 Cocoa 和 Objective-C 中是否存在文件夹?

如何将当前方法的名称或签名放入 NSString?

CF 对象与 NS 对象

如何将 .plist 文件中的数据 struct 读入 NSArray

了解按位与运算符

iOS6:supportedInterfaceOrientations 不起作用(被调用但界面仍然旋转)

如何从输入 IB 的 UILabel 文本中插入新行 \n?

如何将 NSOperationQueue 与 NSURLSession 一起使用?

通过情节提要加载时如何初始化视图?

为什么我们不能在当前队列上使用 dispatch_sync?

请求访问相机胶卷的权限

如何阻止 NSNotification 中的观察者调用两次?

移除所有 CALayer 的子层

Xcode 如何加载主情节提要?