uitableViewCell内容很奇怪

时间:2015-01-27 13:09:45

标签: ios uitableview uiimageview uiimage

我需要一些帮助来理解可能导致我的TableViewCell内容出现问题的原因。在我的应用程序中,我使用论坛。在论坛中,我们使用头像来评论/人。现在我想给名字“X”的每个人一个同样的化身。为此我尝试使用下面的代码,但它不能完美地工作,我不明白为什么?有时候代码会出错并给出一个别名为“Y”的人“X”别名头像?

1.我做的第一件事就是在故事板中使用标签:tableView - > tableViewCell将UIImageViews标记设置为20。

2。然后我运行下面的代码,在其他情况下适用于TableViewCells内容中的Alias,Comments。

 static NSString *CellIdentifier = @"ForumthreadCell";

    UITableViewCell *cell = [pTableView dequeueReusableCellWithIdentifier:CellIdentifier];

    ForumPost *x [self.items objectAtIndex:indexPath.row];

    UIImageView *pic = (UIImageView *) [cell viewWithTag: 20];

    if ([x.alias isEqualsToString:@"X"]){

    [pic setImage:[UIImage imagedNamed:@"some picture here.png"]];

    }

任何帮助或建议表示赞赏。此致

1 个答案:

答案 0 :(得分:3)

这是因为UITableView中的所有单元格都被重用了。这意味着您的第一个单元格将被重新加载,比方说,您的第六个单元格。如果您没有重新加载那里的所有元素,并且您的第一个单元格中有图像,则该图像将保留在第六个单元格中。您可以使用的另一个示例是设置indexPath.row == 1是否将ForumPost的某些属性设置为特定值(在初始化ForumPost *x之后)并且您将具有类似的行为。

要让单元格正常工作,您需要管理所有可能的情况。

例如,你有:

if ([x.alias isEqualsToString:@"X"]){

    [pic setImage:[UIImage imagedNamed:@"some picture here.png"]];

}

但你也需要

else if ([x.alias isEqualsToString:@"Y"]){

    [pic setImage:[UIImage imagedNamed:@"other pic.png"]];

}

并且,如果您有其他起始名称,如a,b,c等:

else if ([x.alias isEqualsToString:@"Y"]){

     [pic setImage:nil];

}