一种在UITableViewCell上清空UIImageView的方法

时间:2014-09-12 14:42:12

标签: ios objective-c uitableview uiimageview

UIImageView上有一个UITableViewCell 当我没有要查看的图像时,我希望它不见了。 我已经实现了这段代码:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    if ((item.content_image != nil) && (item.content_image != (id)[NSNull null]))
    {
        [cell.imageContentImage setImageWithURL:[NSURL item.content_image]] ;
    }
    else
    {
        cell.imageContentImage = nil;
    }
}

我收到一位用户的报告,因为单元格中的图像错误(似乎是从其他单元格复制图像)。

问题是它不会发生在模拟器或我可以调试的设备上,所以我的问题变成了理论上的:

nil分配给UIImageView是正确的方法吗?是否有更正确的"方式是什么?

3 个答案:

答案 0 :(得分:1)

这里有几个问题。首先,当我认为你正在寻找的是更像这样的东西时,你正在对类型为NSNull的对象进行指针比较:

if(item.content_image && ![item.content_image isEqual:[NSNull null]]) {}

其次,您可能会看到重复图像的原因是您每次都没有分配新单元格,而dequeing是一个可重复使用的单元格,可能会遗留旧单元格。最简单的方法是简单地nil立即取出图像视图的图像属性,然后只分配图像(如果存在)。

cell.imageContentImage.image = nil;
if(item.content_image && ![item.content_image isEqual:[NSNull null]])
{
    [cell.imageContentImage setImageWithURL:[NSURL urlWithString:item.content_image]];
}

答案 1 :(得分:1)

为UIImageView的UIImage属性分配nil非常好。也许如果您在单元格中看到不正确的图像(重复图像),它会被缓存?确保不会发生的最安全的方法是在cellForRowAtIndexPath()方法中将单元格出列以始终将单元格的图像设置为nil first ....然后在适当时分配图像。唯一的方法就是获得重复的"那就是数据存在问题。

答案 2 :(得分:0)

在这种情况下,我认为你不想在ELSE块中编写代码。但是如果你想隐藏UIImageView,这是一个更好的方法。

imageView.hidden = YES;