关于如何将UIView作为UITableViewCell选择后备视图的明确答案

时间:2012-04-18 23:26:16

标签: ios uiview uitableview

我已经阅读并尝试了一些我在StackOverflow上找到的答案。我也从博客中读过并试过一些东西,但似乎没有什么能达到我想要的效果。

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

此方法适用于普通UITableViews;在Grouped上不太好。在分组UITableView上,第1个和最后一个单元格不符合剪辑/蒙版界限,如下面的屏幕截图所示。

我知道没有办法只围绕左上角和右上角。

我想严格按代码执行此操作,不带图像。

问题

是否有人知道只使用selectedBackgroundView更改UITableViewCell的{​​{1}}颜色并且不使用图片AND来制作第一个和最后一个单元格符合圆角边界?

实施例

UIView

截图

enter image description here

enter image description here

enter image description here

解决方案

我接受了CodaFis answer因为他添加了一条评论,指出了一个非常好的(但很冗长)解决方案。我不得不进行相当多的改造,但最后,我现在有了我需要的selectedBackgroundView,它绕过第一个和最后一个单元格的角落,再次感谢!

Here is a n example of how I achieved this.

2 个答案:

答案 0 :(得分: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];  

    }
}

答案 1 :(得分: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];
    }
}