我需要一些帮助来理解可能导致我的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"]];
}
任何帮助或建议表示赞赏。此致
答案 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];
}