自定义细胞选择

时间:2012-11-21 23:41:08

标签: iphone objective-c ios

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

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

- (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);
}

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分: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属性。

答案 2 :(得分:0)

我找到了一个效果很好的解决方案,它也会在默认配件视图下方绘制,如附件指示器。我创建了名为BackgroundView和SelectedBackgroundView的自定义视图,我只使用drawRect方法创建自定义绘图。它运作良好,性能似乎没问题。如果有人想看到完整的代码,请告诉我。

[cell setBackgroundView:[[BackgroundView alloc] init]];
[cell setSelectedBackgroundView:[[SelectedBackgroundView alloc] init]];