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
是正确的方法吗?是否有更正确的"方式是什么?
答案 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;