Iphone 选定的自定义单元格

Iphone 选定的自定义单元格,iphone,objective-c,ios,Iphone,Objective C,Ios,我正在绘制一个自定义单元,以获得我想要的特定外观。但是,我希望根据单元格是否处于选中状态执行不同的绘图。我真的不只是想要默认的颜色 我使用此方法更改了内容视图的背景色视图: - (void)setSelected:(BOOL)selected animated:(BOOL)animated 然而,它只是没有正确地出现,主要是它没有考虑到附件,只是在附件指示灯之前给它上色。有没有更好的方法来实现这一点 - (void)drawRect:(CGRect)rect { CGC

我正在绘制一个自定义单元,以获得我想要的特定外观。但是,我希望根据单元格是否处于选中状态执行不同的绘图。我真的不只是想要默认的颜色

我使用此方法更改了内容视图的背景色视图:

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

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

我使用以下方法:

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
属性。

我找到了一个非常有效的解决方案,它还可以在默认附件视图(如附件指示器)下方绘制。我创建了名为BackgroundView的自定义视图,并选择了EdBackgroundView,我只使用drawRect方法创建自定义图形。它工作得很好,性能也不错。如果有人想看完整的代码,请告诉我

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

但是,当我切换屏幕时,单元格会改变相同的颜色,我想不出一个有效的方法来处理这个问题。你有没有尝试过利用任何机会强制重画选定的单元格?可能是在选定的单元格上显示setNeedsDisplay。只是一个建议。是的,这个方法的问题是当你选择一个单元格时,你把手指放在你选择的地方,但是直到你的手指离开屏幕,这个单元格才会高亮显示,不确定是否有办法解决这个问题,这是在drawRect方法中吗?我假设你将selectionStyle设置为none,在我当前的项目中,我有UITableViewCellSelectionStyleGray,而在didSelectRow中,我只调用取消选择行。如果我不调用取消选择行,单元格将保持在选定模式。手指向下时,它实际上处于突出显示状态。您是否设置突出显示或选中,因为这些未为我设置?当我在表中选择一行时,不会调用drawRect方法,但会调用您的?