2012-03-06 5 views
0

셀에 레이블이 포함 된 테이블이 있습니다. 재사용 가능한 셀을 dequeue 할 때마다 오래된 레이블이 여전히 남아 있습니다.재사용 가능한 표 셀에 레이블이 있습니다.

for(int a=[[newcell subviews]count]-1; a>=0;a--) 
    { 
     if([[[[newcell subviews]objectAtIndex:a]class] isSubclassOfClass:[UILabel class]]) 
     { 
      [[[newcell subviews] objectAtIndex:a] removeFromSuperview]; 
     } 
    } 

그러나 셀을 선택하면 새 텍스트 위에 이전 텍스트가 표시됩니다. 나는 이것을 시도했다 :

[[newcell.selectedBackgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 
    [[newcell.backgroundView subviews] makeObjectsPerformSelector: @selector(removeFromSuperview)]; 

그러나 그것은 작동하지 않았다. 셀의 일반보기뿐만 아니라 선택한 셀에서도 이전 레이블을 사라지게 할 수 있습니까?

+0

더 많은 코드를 게시해야합니다. – stephenmuss

+0

어떻게 세포를 만들고 있습니까? – mattjgalloway

답변

1

이러한 종류의 문제는 큐에 대기 중인지 또는 새로 생성하는지에 관계없이 cellForRowAtIndexPath:에있는 셀에 하위보기를 추가 할 때 발생하는 경향이 있습니다. 결과적으로 행을 다시 사용할 때마다 새 하위보기가 만들어지고 오래된 하위보기가 누적됩니다.

매번 동일한 하위보기를 사용하고 대신 매번 관련 속성 (예 : 라벨 또는 색상)을 설정하면됩니다. 가능한 접근법을 보려면 How do I clear a cell completely when I reuse it?에 대한 답변을 확인하십시오.

+0

이것은 (프로그램 적으로 추가 된 IBOutlets가 아닌 뷰에서만) 문제 였고 UITableViewCell의 awakeFromNib에서 contentView.addSubview 호출을 수행하여 문제를 해결할 수 있었고 각각의 내용에 따라 뷰의 값을 변경했습니다. cellForRowAtIndexPath에 필요한 셀 – RanLearns

2

하위 클래스 UITableViewCell (아직없는 경우). prepareForReuse를 재정의하고 거기에서 레이블을 제거하십시오. 일할 수도 있음

+0

prepareForReuse가 내 문제를 해결했습니다! – user523234

0

나는 다소 Yuji가 제안한 것을했습니다. 각 반복마다 새 레이블을 넣는 대신 셀에 레이블이 포함되어 있는지 확인한 다음 레이블에 레이블이있는 경우 레이블을 편집하거나 그렇지 않은 경우 레이블을 편집했습니다. 코드는 다음과 같습니다 :

if([[newcell.contentView subviews] count]>=2 && [[[[newcell.contentView subviews] objectAtIndex:0]class] isSubclassOfClass:[UILabel class]] && 
    [[[[newcell.contentView subviews] objectAtIndex:1]class] isSubclassOfClass:[UILabel class]]) 
{ 
    //change the text of the labels 
} 
else 
{ 
    //add the labels to the cell 
} 
관련 문제