2012-05-08 2 views
0

UItablevewcell에 label을 추가 할 때 셀의 contentview에 nil이 없으면태그를 통해 해당 레이블을 가져옵니다. 셀을 다시 사용하는 올바른 절차입니다. 하지만 두 번째 행에서 해당 레이블을 원하지 않으면 숨길 필요가 있습니다. 두 번째 행의 레이블을 숨기기없이 없이 제거 할 수 있습니다. 첫 행에 필요합니다.특정 행에서만 contentview 개체를 삭제 하시겠습니까?

답변

0

예를 들어, 대기열에서 제외하고 생성 할 때 다른 셀 식별자를 사용할 수 있습니다. @ "레이블이있는 셀"과 @ "예를 들어 레이블이없는 셀".

또는이 레이블에 label.tag = MY_INT_TAG으로 태그를 지정하고 UILabel *label = [cell viewWithTag:MY_INT_TAG]으로 검색하여 두 번째 행의 수퍼보기에서 제거 할 수 있습니다. 그것은 당신이 UITableViewCell을 서브 클래스하고 싶지 않을 때 작동합니다. 당신은 공통 요소가 존재하지 않는 셀을 재사용하는 경우

if (indexPath.row == 0) { 
    UILabel *label = [[UILabel alloc] init]; 
    label.tag = TAG; 
    [cell.contentView addSubview:label]; 
} else if (indexPath.row == 1) { 
    UILabel *label = [cell.contentView viewWithTag:TAG]; 
    [label removeFromSuperView]; 
} 
0

는 가장 좋은 방법은 그것을 다시 사용하기 전에 셀 파단 (모든 추가 요소를) 취소하는 것입니다.

당신이 당신의 필요에 따라 요소를 각 시간을 추가 할 수있는이 방법 ...

당신은이 작업을 수행 할 수 있습니다

[cell.contentView.subviews makeObjectsPerformSelector:@selector(removeFromSuperview)]; 
:

for(UIView *view in cell.contentView.subviews){ 
     [view removeFromSuperview]; 
    } 

또는 좀 더 화려한 수 있도록하려면

물론 특정 행의 특정 요소를 하나만 지우려면 해당 요소를 셀의 contentview에 추가 할 때 해당 요소에 고유 한 태그를 할당 한 다음 해당 태그를 액세스하여 제거해야합니다 이 태그 값입니다 통해 :

셀에 추가

if (indexpath.row == 2) { 
    UIImageView *rightArrow = (UIImageView *)[cell.contentView viewWithTag:111]; 
    if (rightArrow) 
     [rightArrow removeFromSuperView]; 

}

:

UIImageView *rightArrow = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"arrow.png"]]; 
rightArrow.tag = 111; 
rightArrow.frame = CGRectMake(290, 16, 4, 8); 
[cell.contentView addSubview:rightArrow]; 

은 행 2보기에서 제거

관련 문제