iOS: UITableViewCell点击效果下, 防止子控件背景颜色改变

  • UITableViewCell在选中状态下, 上面的子控件会被渲染, 而改变颜色

  • 如下图所示:


    iOS: UITableViewCell点击效果下, 防止子控件背景颜色改变_第1张图片
    系统效果
    • 橙色按钮被渲染, 颜色改变
  • 有时, 我们不想要子控件的颜色被渲染, 而是在整个点击过程中颜色都不变

  • 如下图所示:


    iOS: UITableViewCell点击效果下, 防止子控件背景颜色改变_第2张图片
    目标效果
  • 我们可以在自定义的cell中(继承自UITableViewCell)重写下面这个方法:

    • - (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
  • 具体实现如下

- (void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated
{
    // 获取 contentView 所有子控件
    NSArray<__kindof UIView *> *subViews = self.contentView.subviews;
    // 创建颜色数组
    NSMutableArray *colors = [NSMutableArray array];
    
    for (UIView *view in subViews) {
        // 获取所有子控件颜色
        [colors addObject:view.backgroundColor ?: [UIColor clearColor]];
    }
    // 调用super
    [super setHighlighted:highlighted animated:animated];
    // 修改控件颜色
    for (int i = 0; i < subViews.count; i++) {
        subViews[i].backgroundColor = colors[i];
    }
}

你可能感兴趣的:(iOS: UITableViewCell点击效果下, 防止子控件背景颜色改变)