2012-02-01 27 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; 
} 

结果: 它的屏幕截图,UITableView中加载时:

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]; 
} 
相关问题