滚动后的单元格在图像上显示图像

时间:2014-12-25 14:28:34

标签: ios objective-c ios7 ios8

我有tableview,我想显示目录中一个文件夹中的所有图像,并且我有到该目录的路径。我正在将图像加载到单元格中:

- (void)configureCell:(UITableViewCell *)cell atIndexPath:(NSIndexPath *)indexPath {

    for (UIView * view in cell.contentView.subviews){
        if ([view isKindOfClass:[UIButton class]]) {
            [view removeFromSuperview];
        }
    }

    cell.imageView.image = nil;
    cell.accessoryType = UITableViewCellAccessoryNone;

    NSData *imgData = [NSData dataWithContentsOfFile:absoluteImagePath];
    UIImage *thumbNail = [[UIImage alloc] initWithData:imgData];
    UIImageView *imageView = [[UIImageView alloc] initWithImage:thumbNail];            
    [cell insertSubview:imageView atIndex:0];
}

但是当我向上和向下滚动时,我在图像内部获取图像(旧图像在新图像下方可见,当我滚动时例如第一个位置我看到图像在其他图像下面的索引0)。 有谁知道什么是问题,我是这个iOS编程的新手吗?

3 个答案:

答案 0 :(得分:1)

你应该

  • 继承您的单元格,
  • 为图片创建一个插座,
  • 在故事板中设计布局。

好处:

  • 无需检查(cell==nil)
  • 您必须编写更少的代码
  • 没有冗余视图创建错误的清洁解决方案

答案 1 :(得分:1)

当重复使用该单元格时,[cell insertSubview:imageView atIndex:0];会向该单元格添加额外的UIImageView。建议是创建自定义UITableViewCell,并在prepareForReuse方法中删除UIImageView。识别要删除的UIImageView的简便方法是向其添加tag。如,

imageView.tag = 1000;

然后您可以使用

找到图像视图
UIImageView *imageView = [self.contentView viewWithTag:1000];
if (imageView) {
    [imageView removeFromSuperview];
}

答案 2 :(得分:0)

声明UIImageView初始化单元格的位置。 例如

if (cell==nil)
{ 
UIImageView *image = [[UIImageView alloc]initWithFrame:yourFrame];
[cell addSubView:image];
}
image.image = yourImage;

或者,您可以在将新的UIImageView添加为子视图之前从单元格中删除所有子视图。