美文网首页iOS 进阶
iOS: UITableViewCell点击效果下, 防止子控件

iOS: UITableViewCell点击效果下, 防止子控件

作者: 伯wen | 来源:发表于2017-05-16 16:23 被阅读1280次
    • UITableViewCell在选中状态下, 上面的子控件会被渲染, 而改变颜色

    • 如下图所示:


      系统效果
      • 橙色按钮被渲染, 颜色改变
    • 有时, 我们不想要子控件的颜色被渲染, 而是在整个点击过程中颜色都不变

    • 如下图所示:


      目标效果
    • 我们可以在自定义的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点击效果下, 防止子控件

        本文链接:https://www.haomeiwen.com/subject/rtvlxxtx.html