2012-02-01 6 views
-2

사용자 정의 테이블 뷰 셀을 만들고 있지만 결과가 정확하지 않습니다. 내 코드 :UITableView로 알 수없는 것

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath 
{ 
    NSDictionary *currentComment = [comments objectAtIndex:indexPath.row]; 

    static NSString *CellIdentifier = @"TitleCell"; 

    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
    if (cell == nil) { 
     cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:CellIdentifier] autorelease]; 
    } 
    int commentLevel = [[currentComment objectForKey:@"level"] intValue]; 
    NSString *commentText = [currentComment objectForKey:@"text"]; 
    UILabel *titleLabel = [[UILabel alloc] init]; 
    titleLabel.numberOfLines = 0; 
    [titleLabel setFont:[UIFont fontWithName:@"Verdana" size:17.0]]; 
    titleLabel.lineBreakMode = UILineBreakModeWordWrap; 
    CGSize textSize; 
    if (commentLevel == 0) { 
     textSize = [commentText sizeWithFont:titleLabel.font constrainedToSize:CGSizeMake(310, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
     titleLabel.frame = CGRectMake(5, 5, textSize.width, textSize.height); 
    } else { 
     textSize = [commentText sizeWithFont:titleLabel.font constrainedToSize:CGSizeMake((305-10*commentLevel), FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
     titleLabel.frame = CGRectMake(15 + 10*commentLevel, 5, textSize.width, textSize.height); 
     UIImageView *img = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"06-arrow-northwest"]]; 
     img.frame = CGRectMake(5, 5, 15, 15); 
     [cell.contentView addSubview:img]; 
    } 
    titleLabel.text = commentText; 
    [cell.contentView addSubview:titleLabel]; 


    return cell; 
} 
- (float)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath { 
    NSDictionary *currentComment = [comments objectAtIndex:indexPath.row]; 
    int commentLevel = [[currentComment objectForKey:@"level"] intValue]; 
    NSString *text = [currentComment objectForKey:@"text"]; 
    CGSize size; 
    if (commentLevel == 0) { 
     size = [text sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] constrainedToSize:CGSizeMake(310, FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 
    } else { 
     size = [text sizeWithFont:[UIFont fontWithName:@"Verdana" size:17.0] constrainedToSize:CGSizeMake((305-10*commentLevel), FLT_MAX) lineBreakMode:UILineBreakModeWordWrap]; 

    } 
    float height = size.height; 
    height = height + 40; 
    return height; 
} 

결과 : 그것은 jQuery과로드 스크린 샷입니다 : enter image description here

하지만,이 세포가 보이지 않는 그것은 눈에 보이는 결과가 나쁜 이후가 될 경우

:

enter image description here

내 실수는 어디에서 왔습니까?

답변

2

세포를 재사용 중이므로 img 및 titleLabel이 추가됩니다. 같은 셀에 하위 뷰를 추가하고 있습니다. 새 셀을 추가하기 전에 재사용 된 셀에서 titleLabel 및 img을 제거 할 수 있습니다. 이렇게하려면 두보기에서 태그 값을 설정할 수 있습니다. 예를 들어, 당신은 쓸 수 있습니다 :

titleLabel.tag = 0xff ; 

img.tag = 0xfe ; 

을 그런 다음 셀 재사용 할 때

UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier]; 
if (cell == nil) { 
    cell = [[[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault 
       reuseIdentifier:CellIdentifier] autorelease]; 
} else { 
    [[cell viewWithTag:0xff] removeFromSuperview]; 
    [[cell viewWithTag:0xfe] removeFromSuperview]; 
} 
관련 문제