1

我正在绘制一个自定义单元格,以实现我想要的某种外观。但是,我想根据单元格是否被选中来执行不同的绘图。我真的不只是想要默认颜色。

我在此方法中更改了内容视图的背景颜色:

- (void)setSelected:(BOOL)selected animated:(BOOL)animated

但是,它只是没有正确显示,主要是没有考虑到附件,只是在附件指示器之前对其进行了着色。有没有更好的方法来实现这一点?

- (void)drawRect:(CGRect)rect
{        
    CGContextRef context = UIGraphicsGetCurrentContext();

    // Background
    CGContextSetFillColorWithColor(context, CELL_BACKGROUND_COLOR);
    CGContextMoveToPoint(context, 0.0f, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, rect.size.height);
    CGContextAddLineToPoint(context, 0.0f, rect.size.height);
    CGContextClosePath(context);
    CGContextFillPath(context);

    // Top line
    CGContextSetStrokeColorWithColor(context, CELL_TOP_LINE_COLOR);
    CGContextSetLineWidth(context, CELL_LINE_WIDTH);
    CGContextSetLineCap(context, kCGLineCapSquare);
    CGContextMoveToPoint(context, 0.0f, 0.0f);
    CGContextAddLineToPoint(context, rect.size.width, 0.0f);
    CGContextStrokePath(context);

    //Bottom line
    CGContextSetStrokeColorWithColor(context, CELL_BOTTOM_LINE_COLOR);
    CGContextSetLineWidth(context, CELL_LINE_WIDTH);
    CGContextSetLineCap(context, kCGLineCapSquare);
    CGContextMoveToPoint(context, 0.0f, rect.size.height);
    CGContextAddLineToPoint(context, rect.size.width, rect.size.height);
    CGContextStrokePath(context);
}
4

3 回答 3

0

我认为您应该修改方法并根据属性drawRect更改颜色的设置方式。isSelected在 setSelected 方法时更改内容的视图背景可能不会更改任何内容,因为它将被该drawRect方法覆盖。

于 2012-11-21T23:51:18.203 回答
0

我正在使用这个:

if(self.highlighted || self.selected) {
    //set text color
    textColor = [UIColor colorWithRed:204.0/255.0 green:255.0/255.0 blue:0 alpha:1.0];

    //set background color
    [[UIColor colorWithRed:0.0 green:0.0 blue:0.0 alpha:0.7] set];
    CGContextFillRect(context, r);
}

还要检查selectionStyle你的单元格的属性。

于 2012-11-22T00:06:04.373 回答
0

我找到了一个效果很好的解决方案,它还在默认附件视图下方绘制,例如附件指示器。我创建了名为 BackgroundView 和 SelectedBackgroundView 的自定义视图,我只是使用 drawRect 方法来创建自定义绘图。它工作得很好,性能似乎还可以。如果有人想查看完整代码,请告诉我。

[cell setBackgroundView:[[BackgroundView alloc] init]];
[cell setSelectedBackgroundView:[[SelectedBackgroundView alloc] init]];
于 2012-11-22T01:22:32.677 回答