2012-11-21 4 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 메서드가 아무 것도 변경하지 않을 때 콘텐츠의보기 배경을 변경합니다.

+0

나는 화면을 전환 할 때 그러나, 세포가 동일한 색상을 변경할 것을 시도하고,이 – Vikings

+0

당신에 의해 선택된 셀의 다시 그리기를 강제로 시도해 봤어 처리 할 수있는 효율적인 방법을 생각할 수 없다 어쩌면 - 아마도 setNeeds를 사용하여 선택한 셀에 표시 할 수 있습니다. 그냥 제안. – 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