我有一个带有两个UIImageView
我像这样创建单元格:
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
static NSString *CellIdentifier = @"PollCell";
PollListVO * pollist = [self.pollListArray objectAtIndex:indexPath.section];
PollCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
PollVO *pollVO = [pollist.polls objectAtIndex:indexPath.row];
cell.pollVO = pollVO;
return cell;
}
在单元格中我有一个方法:
- (void) setPollVO:(PollVO *)pollVO
{
NSString *iconName;
if ([pollVO.author isEqualToString:@"Иванов"]) {
iconName = @"image_common_from_mayor.png";
} else if ([pollVO.author isEqualToString:@"Петров"]) {
iconName = @"image_common_from_government.png";
} else if ([pollVO.author isEqualToString:@"Сидоров"]) {
iconName = @"image_common_from_edition.png";
}
if (iconName) {
_mainIconImageView.image = [UIImage imageNamed:iconName];
}
_titleLabel.text = pollVO.title;
_detailLabel.text = pollVO.author;
_questionLabel.text = [[self class] stringWithQuestionsQuantity:pollVO.questionsQuantity];
_bounceLabel.text = [[self class] stringWithPointValue:pollVO.points];
_bounceDetailLabel.text = [SCUtils stringPointsCount:pollVO.points];
_pollVO = pollVO;
}
并且在布局子视图中,我根据数据更改元素的位置和隐藏属性;
问题是,在我滚动单元格之后 - 我在前一个单元格的单元格上有图像 - 但它不应该出现在这个特定的单元格上。因此,在重复使用单元格之后,它有时会从其他单元格中获取图标。错误在哪里?我该如何解决这个问题?
答案 0 :(得分:3)
问题在于,当您重复使用单元格时,它会保留之前设置的图像(以及所有属性)。为了纠正这种行为,您可以每次将图像设置为nil:
if (iconName) {
_mainIconImageView.image = [UIImage imageNamed:iconName];
}else{
_mainIconImageView.image = nil;
}
或者在PollCell.m中,覆盖准备重用:
- (void) prepareForReuse{
[super prepareForReuse];
self.image = nil;
}
答案 1 :(得分:2)
如果UITableView被重用,它将保持其以前的状态。每次重复使用单元格以覆盖所有属性时,您必须重置所有视图和属性。
例如,对于您的图片,您可以将代码更改为:if (iconName) {
_mainIconImageView.image = [UIImage imageNamed:iconName];
}else {
_mainIconImageView.image = nil
}