iOS中选中TableViewCell时如何高亮其子视图?
解决iOS表格单元格选中时图标子视图高亮的问题
针对WhatsApp贴纸iOS示例项目中的表格单元格选中时图标子视图不高亮的问题,可通过以下几种方案解决:
方案1:利用UIImageView自带的高亮属性
如果你的图标是UIImageView,可以直接开启系统自带的高亮适配:
- 在初始化
UIImageView时,设置adjustsImageWhenHighlighted = true,这样单元格选中时,图片会自动呈现高亮变暗的效果:
let iconImageView = UIImageView(image: UIImage(named: "sticker-icon")) iconImageView.adjustsImageWhenHighlighted = true contentView.addSubview(iconImageView)
- 若使用模板化图片(UIImageRenderingModeAlwaysTemplate),还可以配合
tintColor自定义高亮时的图标颜色,结合adjustsImageWhenHighlighted实现更灵活的样式。
方案2:重写单元格的高亮状态方法
如果需要自定义高亮样式(比如图标变色、透明度变化等),可以重写单元格的setHighlighted(_:animated:)方法,手动控制子视图的状态:
class StickerPackCell: UITableViewCell { // 假设你的图标视图是这个属性 var iconImageView: UIImageView! override func setHighlighted(_ highlighted: Bool, animated: Bool) { super.setHighlighted(highlighted, animated: animated) // 根据高亮状态设置图标样式 let targetTintColor: UIColor = highlighted ? .systemGray : .label let targetAlpha: CGFloat = highlighted ? 0.7 : 1.0 if animated { UIView.animate(withDuration: 0.2) { self.iconImageView.tintColor = targetTintColor self.iconImageView.alpha = targetAlpha } } else { self.iconImageView.tintColor = targetTintColor self.iconImageView.alpha = targetAlpha } } // 同时建议重写setSelected方法,保持选中和高亮状态一致 override func setSelected(_ selected: Bool, animated: Bool) { super.setSelected(selected, animated: animated) setHighlighted(selected, animated: animated) } }
注意事项
- 确保图标子视图的
isUserInteractionEnabled = false,避免干扰单元格的选中响应逻辑。 - 如果使用自定义视图作为图标,需要在自定义视图内部实现高亮状态的适配逻辑,或者在单元格的高亮方法中直接修改自定义视图的属性。
内容的提问来源于stack exchange,提问作者Marc
相关产品推荐
相关产品推荐

