我正在绘制一个自定义单元格,以实现我想要的某种外观。但是,我想基于是否选择单元格来执行不同的绘图。我真的不只是想要默认颜色。
我在此方法中更改了内容的视图背景颜色:
- (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);
}
答案 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]];