8

我已经阅读并尝试了一些在 StackOverflow 上找到的答案。我也从博客中阅读并尝试了一些东西,但似乎没有什么能完成我正在寻找的东西。

我创建一个UIView并将其背景颜色设置为我想要的UITableViewCell选择颜色(而不是标准的蓝色或灰色选择颜色)。我将它添加UIView到我的单元格中selectedBackgroundView,这工作正常,我的单元格在用户选择时更改为所需的颜色。

这种方法在 Plain 上效果很好UITableViews;分组不太好。在分组UITableView上,第一个和最后一个单元格不符合剪辑/蒙版边界,如下面的屏幕截图所示。

我知道没有办法只舍入左上角和右上角。

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

问题

有谁知道一个很好的小工作来改变一个只使用而不是图像的selectedBackgroundView颜色并使第一个和最后一个单元格符合圆角边界?UITableViewCellUIView

例子

- (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,它位于第一个和最后一个单元格的拐角处,再次感谢!

这是我如何实现这一目标的一个例子。

4

2 回答 2

3

由于单元格的复杂性,我假设您正在使用 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];  

    }
}
于 2012-04-18T23:43:13.780 回答
1

我有同样的问题,并通过在我的 UITableViewCell 子类中覆盖-(void)setHighlighted:(BOOL)highlighted animated:(BOOL)animated并在创建单元格时设置不选择样式来修复它

//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];
    }
}
于 2012-12-12T18:50:29.093 回答