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

来源:互联网 发布:php addslashes 编辑:程序博客网 时间:2024/05/16 08:28
  • UITableViewCell在选中状态下, 上面的子控件会被渲染, 而改变颜色
  • 如下图所示:


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

  • 如下图所示:


    目标效果
  • 我们可以在自定义的cell中(继承自UITableViewCell)重写下面两个方法:

    • - (void)setSelected:(BOOL)selected animated:(BOOL)animated
    • - (void)setSelected:(BOOL)selected animated:(BOOL)animated
  • 具体实现如下

- (void)setSelected:(BOOL)selected 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 setSelected:selected animated:animated];    // 修改控件颜色    for (int i = 0; i < subViews.count; i++) {        subViews[i].backgroundColor = colors[i];    }}- (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];    }}
阅读全文
0 0