UITableView imageView显示滚动后图像不应该出现的图像

时间:2014-10-03 12:07:18

标签: objective-c xcode uitableview

我有一个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 //

1 个答案:

答案 0 :(得分:0)

发生这种情况的原因是因为表格单元格被重复使用。

使用[tableView dequeueReusableCellWithIdentifier:CellIdentifier]时,会返回已在表视图中显示的单元格(针对不同的索引路径)。您可能已经在此上一个索引路径的Person中为此单元格添加了一个图像视图,并且您无法删除此图像。

因此,当前人物没有照片时,前一张图片将在单元格中保持可见。

我建议您创建自己的UITableViewCell子类并为其添加UIImageView,以便您可以轻松地将引用返回到图像视图(或者您可以使用视图标记,如果您喜欢)。

无论哪种方式,当用户没有照片时,您需要删除图片视图/将图片设置为nil