如何防止自定义 UITableViewCells 在取消选择时闪烁白色?

Posted

技术标签:

【中文标题】如何防止自定义 UITableViewCells 在取消选择时闪烁白色?【英文标题】:How do I prevent custom UITableViewCells from flashing white on deselecting? 【发布时间】:2012-06-04 13:44:35 【问题描述】:

我有一个自定义 UITableViewCell,它会根据它所在的行改变颜色:

TableViewController.m

- (void)willDisplayCell:(GSRSongCell *)cell atIndexPath:(NSIndexPath *)indexPath;

    if (indexPath.row % 2 == 0) 
        [cell lighten];
     else 
        [cell darken];
    

CustomTableViewCell.m

- (void)lighten

    self.selectedBackgroundView.backgroundColor = [UIColor whiteColor];
    self.contentView.backgroundColor = [UIColor whiteColor];
    self.primaryLabel.backgroundColor = [UIColor whiteColor];
    self.secondaryLabel.backgroundColor = [UIColor whiteColor];

- (void)darken

    UIColor *darkColor = [UIColor colorWithR:241 G:241 B:241 A:1];
    self.selectedBackgroundView.backgroundColor = darkColor;
    self.contentView.backgroundColor = darkColor;
    self.primaryLabel.backgroundColor = darkColor;
    self.secondaryLabel.backgroundColor = darkColor;

但是,当我调用deselectRowAtIndexPath:animated:YES 时,动画在单元格中淡出为白色,而selectedBackgroundColor 应该更暗。

然后我意识到取消选择动画与selectedBackgroundColor无关;其实取消选择动画其实是基于tableView.backgroundColor属性的!

如何覆盖取消选择动画以淡化为单元格的背景颜色?

【问题讨论】:

我也尝试将 tableView.backgroundColor 设置为 [UIColor clearColor] - 这没有效果。 【参考方案1】:

它实际上是动画回到单元格背景颜色,所以你也必须设置它

在lighten方法中加入这一行

self.backgroundColor = [UIColor whiteColor];

还有这个变暗的方法

self.backgroundColor = darkColor;

【讨论】:

不敢相信我没有尝试过。谢谢!【参考方案2】:

只需在 UIBuilder 或代码中将单元格选择设置为 UITableViewCellSelectionStyleNone:

cell.selectionStyle = UITableViewCellSelectionStyleNone;

【讨论】:

对于 Swift 中的我来说,我有 'cell.selectionStyle = UITableViewCellSelectionStyle.None'

以上是关于如何防止自定义 UITableViewCells 在取消选择时闪烁白色?的主要内容,如果未能解决你的问题,请参考以下文章

防止 UITableViewCells 出队并重新加载

一个NIB中的几个自定义UITableViewCells - 如何在代码中引用?

如何使用 begin-endUpdates() 和多个自定义单元格展开/折叠 UITableViewCells?

使用插入动画时,如何防止我的 UITableViewCells 内容与其他单元格重叠?

Swift:如何防止未显示的 UITableViewCells 在滚动时被关闭

SearchController 不搜索自定义 UITableViewCells