为啥我的自定义单元格仅在用户移开手指时突出显示?

Posted

技术标签:

【中文标题】为啥我的自定义单元格仅在用户移开手指时突出显示?【英文标题】:Why does my custom cell only highlight when the user removes their finger?为什么我的自定义单元格仅在用户移开手指时突出显示? 【发布时间】:2011-04-20 09:20:30 【问题描述】:

我已经创建了一个自定义的 UITableViewCell,并使用以下代码设置了 backgroundView:

- (void)layoutSubviews

    [super layoutSubviews];

    self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NormalImage"]];
    self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"HighlightedImage"]];

    // other layout stuff

这很好用,只是当用户选择一行时,它不会突出显示 - 它只会在用户抬起他们的手指时突出显示(因此在过渡到下一个之前你会短暂地看到它突出显示看法)。如果我删除 self.selectedBackgroundView 行,以便正常的 ios 蓝色单元格突出显示,它会在单元格被选中时突出显示。

这是为什么?

【问题讨论】:

【参考方案1】:

在自定义表格单元格中尝试此代码

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated

    [super setHighlighted:highlighted animated:animated];
    if (highlighted) 
    self.selectedBackgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"HighlightedImage"]];

     else 
    self.backgroundView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"NormalImage"]];

    

【讨论】:

【参考方案2】:

您可以在初始化自定义单元格时分配 backgroundView 和 selectedBackgroundView。根据apple's doc,selectedBackgroudView作为单元格被选中时的背景。

如果你在 -(void)layoutSubviews 中编写这些代码,当单元格被选中或取消选中时,它会调用 -(void)layoutSubviews。然后,每次自定义单元格的状态发生更改时,您的 backgroundView 和 selectedBackgroundview 都会重新分配给新的 UIView 实例。

【讨论】:

在init方法中设置backgroundView和selectedBackgroundView不起作用。

以上是关于为啥我的自定义单元格仅在用户移开手指时突出显示?的主要内容,如果未能解决你的问题,请参考以下文章

检测 UIGestureRecognizer 点击并释放以显示和删除 UIView

为啥我的 Java 自定义单元格渲染器在选择行/单元格时不显示突出显示?

如何使单元格仅在填充后才能读取?数据网格视图 C#

突出显示时,表格单元格中的 iOS 自定义按钮变暗

表视图单元格仅在屏幕外时自动布局

为啥我的自定义表格单元格中的标签在单击行之前无法显示