2010-02-10 4 views
0

UITableViewCell의 하위 클래스가 있습니다. 여기에는 UIImageViews, Labels 등이 포함되어 있습니다.
이 셀은 재사용이 가능하기 때문에 조금 모양을 바꿀 수 있기를 바랍니다. 현재 표시중인 데이터에 따라 다릅니다.UITableViewCell은 그리기 전에 컨텍스트를 지우지 않습니다.

이 같은 때로는 숨길 수 있도록하려면
UIImageView* delimeterView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"cellDelimiter.png"]]; 

: -

그래서 예를 들어 나는 나의 정의에있는 UITableViewCell이보기가

- (void) setRecord:(id)record__ { 
    if (record__.type == NO_DELIMETER_VIEW) 
     delimeterView.hidden = YES; 
    else 
     delimeterView.hidden = NO; 
    [self setNeedsLayout]; 
} 

그러나 문제가 있다는 것입니다 delimeterView init 메서드에서 한 번 그려진 것처럼 그리기 컨텍스트가 변경되거나 지워지지 않은 것처럼 항상 셀에 표시됩니다. 나는 셀 및 해당 contentView에 대해 YES로 clearsContextBeforeDrawing 속성을 설정해 보았습니다. 셀 및 해당 contentView에 대한 불투명도 설정을 시도했는데 투명성을 사용하는 경우에 문제가있을 수 있으므로 읽었습니다. 조회수.
아무 도움이되지 않습니다.
UITableViewCell은 그래픽 컨텍스트를 지우지 않고 오래된 요소 위에 페인트하는 것처럼 보입니다.
내가 뭘 잘못하고 있는지에 대한 정보는? 사용자 지정 그림을 사용하여이 문제를 해결할 수 있지만 차라리하지 않을 것입니다.

+0

그리고 [- UITableView cellForRowAtIndexPath :] (또는 - [UITableViewDelegate tableView : willDisplayCell : forRowAtIndexPath :])에서 반환 할 때마다 셀에서 -setRecord :를 호출하고 있습니까? –

+0

예, cellForRowAtIndexPath 메소드에서 매번 호출하도록되어 있습니다. – Alexey

답변

1

우선 setRecord:delimeterView이 실제로 delimeterView을 가리키고 있습니까? 코드 예제에서는 로컬에 할당합니다. 나중에 이것을 ivar에 할당합니까? (당신은 항상 ivars : self.delimeterView에 접근하기 위해 접근자를 사용해야한다).

다음으로 -setNeedsLayout을 호출하면 -layoutIfNeeded으로 전화가 걸려오고 계층 구조는 -layoutSubviews입니다. -layoutSubviews의 기본 구현은 아무 것도 수행하지 않습니다. 여기에 -setNeedsDisplay으로 전화를 걸거나 원하는 것을하기 위해 -layoutSubviews을 구현해야합니다.

+0

네, setNeedsDisplay가 실제로 올바른 방법이었습니다. 그 점을 지적 해 주셔서 감사합니다. – Alexey

관련 문제