我有一个uitableview,其中包含一系列人物。有些记录有图像,有些记录没有。如果我向下滚动列表,它看起来是正确的,但如果我向上滚动,那么另一个人的图像开始显示在其他人的单元格行中,图像不应该是。这是我的cellForRowAtIndexPath
代码// START CELL LABELLING FOR TABLE VIEW LIST //
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
static NSString *CellIdentifier = @"Cell";
UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:CellIdentifier];
if(!cell){
cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleSubtitle reuseIdentifier:CellIdentifier];
}
Person *person = [arrayOfPersons objectAtIndex:indexPath.row];
NSString *personPhoto = person.personPhoto;
NSString* imgPath = [docPath stringByAppendingPathComponent:
[NSString stringWithFormat:@"%@", personPhoto] ];
if ([[NSFileManager defaultManager] fileExistsAtPath:imgPath]){
NSLog(@"FILE EXISTS");
imageView = [[UIImageView alloc] initWithFrame:CGRectMake(240, 0, 67, 67)];
imageView.image = [UIImage imageWithContentsOfFile:imgPath];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[cell.contentView addSubview:imageView];
}else{
NSLog(@"Does Not Exist");
}
cell.textLabel.text = person.personName;
return cell;
imageView = nil;
personPhoto = @"";
imgPath = @"";
}
// END CELL LABELLING FOR TABLE VIEW LIST //
答案 0 :(得分:0)
发生这种情况的原因是因为表格单元格被重复使用。
使用[tableView dequeueReusableCellWithIdentifier:CellIdentifier]
时,会返回已在表视图中显示的单元格(针对不同的索引路径)。您可能已经在此上一个索引路径的Person中为此单元格添加了一个图像视图,并且您无法删除此图像。
因此,当前人物没有照片时,前一张图片将在单元格中保持可见。
我建议您创建自己的UITableViewCell
子类并为其添加UIImageView
,以便您可以轻松地将引用返回到图像视图(或者您可以使用视图标记,如果您喜欢)。
无论哪种方式,当用户没有照片时,您需要删除图片视图/将图片设置为nil
。