2012-11-21 69 views
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); 
} 

回答

0

我發現了一個效果很好的解決方案,它還在默認配件視圖下繪製,如附件指示器。我創建了自定義視圖的BackgroundView和SelectedBackgroundView,我只是使用drawRect方法來創建自定義繪圖。它工作得很好,表現似乎沒問題。如果有人想看到完整的代碼,請告訴我。

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

我想你應該修改drawRect方法,改變你的顏色是如何取決於isSelected屬性的設置。當setSelected方法可能不會更改任何內容時,更改內容的視圖背景,因爲它將覆蓋drawRect方法。

+0

我想那不過,當我切換屏幕時,電池將改變相同的顏色,我想不出一個有效的方式來處理這個 – Vikings

+0

你嘗試通過強制選定單元格的重新劃分任何機會 - 可能在你選擇的單元格上有一個setNeedsDisplay。只是一個建議。 – tiguero

+0

是的,這種方法的問題是當你選擇一個單元格時,你將手指放在你選擇的位置,但是單元格不會突出顯示,直到你讓手指離開屏幕,不確定是否有方法 – Vikings

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財產。

+0

這是在drawRect方法嗎? – Vikings

+0

drawRect在我的自定義單元格中。 – Alex

+0

而我假設你將selectionStyle設置爲none,並在didSelectRow中調用setNeedsDisplay? – Vikings