如何屏蔽一个UIView作为一个UITableViewCell selectedBackground

2019-07-29 01:11发布

我已阅读并尝试我已经在计算器上找到了一些答案。 我也看到了,并从博客尝试了一些东西,但似乎没有完成我所期待的。

我创建UIView ,并设置它的背景颜色为我所期望UITableViewCell选择颜色(而不是标准的蓝色或灰色选择颜色)。 我这个添加UIView到我的手机的selectedBackgroundView这工作得很好,我的变化,以用户选择所需的颜色。

此方法适用于平原大UITableViews ; 没有这么好分。 在一个分组UITableView ,第一和最后一个单元格不符合如下面的截图展示夹/掩码界限。

我知道有没有办法圆仅仅只有左上角和右上角的角落。

我想通过代码严格地做到这一点,没有图像。

有谁知道一个不错的工作,围绕改变selectedBackgroundView一个颜色UITableViewCell仅使用UIView而不是图像,并使第一和最后一个单元格符合圆角的边界呢?

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    static NSString * CellIdentifier = @"Cell";
    WCSBadgedCell   * cell = [[WCSBadgedCell alloc] initWithStyle:UITableViewCellStyleSubtitle andBadgeStyle:0 reuseIdentifier:CellIdentifier]; 
    if (cell == nil) {
        cell = [[WCSBadgedCell alloc] initWithStyle:UITableViewCellStyleDefault andBadgeStyle:0 reuseIdentifier:CellIdentifier];
    }

    UIView *bgColorView = [[UIView alloc] init];
    [bgColorView setBackgroundColor:DARKBROWN];
    [bgColorView setClipsToBounds: YES];
    [cell.layer setMasksToBounds:YES];
    [cell setSelectedBackgroundView:bgColorView];

    [cell.textLabel setText: @"Testing a Cell"];

    return cell;
}

截图

我接受CodaFis的答案 ,因为他说这指出了一个很不错的(但冗长的)解决方案的注释。 我不得不做了不少改造的,但最终,我现在再次有selectedBackgroundView的,我需要这轮第一和最后一个单元的角落,谢谢!

下面是我如何实现这样的一个例子。

Answer 1:

我假设你正在使用因为你的细胞的复杂的UITableViewCell子类。 这就是我一直在做它:

- (id)initWithStyle:(UITableViewCellStyle)style reuseIdentifier:(NSString *)reuseIdentifier
{
    if ((self = [super initWithStyle:style reuseIdentifier:reuseIdentifier]))
    {
        self.clipsToBounds = YES;

        UIView* bgView = [[UIView alloc] init];
        bgView.backgroundColor = [UIColor colorWithWhite:0.f alpha:0.25f];
        self.selectedBackgroundView = bgView;
                //other code

    }
    return self;
}

这将产生一种对细胞暗灰色覆盖的,不需要的图像!

在你的情况,你的所选单元格的确切的颜色(感谢方便的花花公子数码色彩照度计)会

[UIColor colorWithRed:106.0f/255.0f green:51.0f/255.0f blue:6.0f/255.0f alpha:1.0f];

和白色文字会

- (void)setSelected:(BOOL)sel animated:(BOOL)animated
{
    [super setSelected:sel animated:animated];

    if (sel)
    {
        self.textLabel.textColor = [UIColor whiteColor];

        }
    else
    {
        self.textLabel.textColor = [UIColor colorWithRed:(105.f/255.f) green:(50.f/255.f) blue:(6.f/255.f) alpha:1.f];  

    }
}


Answer 2:

我有同样的问题,并通过覆盖固定它-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated在我的UITableViewCell子类和创建单元格时没有设置选择风格

//set no selection style in the cell
...
[self setSelectionStyle:UITableViewCellSelectionStyleNone];
...

//override setHighlighted to manually set the regular/highlighted background colors
-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated {
    [super setHighlighted:highlighted animated:animated];
    if(highlighted){
        self.backgroundColor = [UIColor greenColor];
    }
    else {
        self.backgroundColor = [UIColor redColor];
    }
}


文章来源: Clear answer on how to Mask a UIView as a UITableViewCell selectedBackgroundView