【问题标题】:Image in reused cell in a TableView not being cleared from ImageVIew未从 ImageVIew 清除 TableView 中重用单元格中的图像
【发布时间】:2012-05-17 10:11:44
【问题描述】:

我有一个包含带有图像的单元格的 Tableview,但是重用的单元格仍然包含上一个单元格中的图像,该图像正在被重用,直到新图像被下载和设置。

我尝试将图像设置为零。 (imageV 是 HJManagedImageV 的子类,源码可以在这里找到:HJManagedImageV

[cell.imageV setImage:nil];

二传手

-(void)setImage:(UIImage *)theImage{
    if (theImage==image) {
        //when the same image is on the screen multiple times, an image that is alredy set might be set again with the same image.
        return; 
    }
    [theImage retain];
    [image release];
    image = theImage;
    [imageView removeFromSuperview];
    self.imageView = [[[UIImageView alloc] initWithImage:theImage] autorelease];
    [self addSubview:imageView];
    [imageView setNeedsLayout];
    [self setNeedsLayout];
    [loadingWheel stopAnimating];
    [loadingWheel removeFromSuperview];
    self.loadingWheel = nil;
    self.hidden=NO;
    if (image!=nil) {
        [callbackOnSetImage managedImageSet:self];
    }
}

我有一个解决方法,方法是将 imageV 设置为 hidden,但随后我失去了加载微调器,我真的很想知道为什么将其设置为 nil 不起作用。

任何人都有任何想法,因为我完全没有想法。还是我在某处遗漏了一步。

【问题讨论】:

    标签: iphone ios uitableview


    【解决方案1】:

    单元格是 UITableViewCell 的子类吗?如果是,我会尝试实现方法 prepareForReuse 看看是否可以解决那里的问题。

    希望这会有所帮助 =)

    【讨论】:

    • 来自您发布的链接:“出于性能原因,您应该只重置与内容无关的单元格属性,例如 alpha、编辑和选择状态。表格视图的委托在tableView:cellForRowAtIndexPath: 重用单元格时应始终重置所有内容。”所以我不认为这是要走的路。
    • 在将 UIImageView 设置为 nil 或默认图像时,使用此方法从未见过性能问题。但是,如果您甚至不想尝试这种方法,那么 Bogdan Bucur 的答案是您最好的选择(恕我直言)。
    • 我刚刚尝试在prepareForReuse中将imageview中的图像设置为nil,但它仍然出现。我放了一个默认图像,碰巧使用了一个半透明的图像,在它下面仍然可以看到以前的图像。你知道为什么会这样吗?是否有某种仍在使用的绘图缓存或类似的东西。我已经放了一张空白的白色图像并且可以正常工作,但我仍然想知道为什么将其设置为 nil 不起作用。
    • 您是否在正确的 UIImageView 中设置了图像?设置半透明图像永远不应在其下方显示旧图像。
    • 傻问题:你试过HJManagedImageV自带的clear方法吗?
    【解决方案2】:

    不要将它设置为 nil,也不要隐藏它。 我们使用一个类似的类,我们对这种情况所做的就是设置一个要显示的起始图像,直到新图像加载。 因此,在您的情况下,您可以简单地将图像设置为捆绑包中的空白 jpg/png 而不是 nil

    【讨论】:

    • 我放了一张默认图片,碰巧用了半透明的图片,在它下面还能看到之前的图片。你知道为什么会这样吗?是否有某种仍在使用的绘图缓存或类似的东西。我已经放了一张空白的白色图像并且可以正常工作,但我仍然想知道为什么将其设置为 nil 不起作用。
    • 据我所知,将某些东西设置为 nil 实际上是一种发布声明,它实际上并没有清空对象,如果还有其他东西保留它,则不会。我不是 100% 确定这一点,这是我的一位同事告诉我的。
    • 啊,你去吧,关于零部分:stackoverflow.com/questions/4739937/…
    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2021-03-05
    • 2013-08-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多