无法通过setHidden隐藏UIImageView:

时间:2014-08-18 17:10:54

标签: ios objective-c uitableview user-interface uiimageview

我有一个自定义UITableViewCell,我在其中创建一个这样的图标:

self.icon = [[UIImageView alloc] initWithFrame:CGRectMake(15, 15, 50, 50)];
[self.icon setImage:[AppearanceProxyController getImageForAssetIdentifier:@"import"]];
[self addSubview:self.icon];

效果很好。另外还有隐藏图标的方法:

-(void)hideIcon{
    dispatch_async(dispatch_get_main_queue(), ^{
        [self.icon setHidden:true];
    });
}

哪个......根本没有效果,我也不知道为什么。 从tableviewcontroller中轻击单元格时调用该方法。

检查表明它是隐藏的但不是。

UIImageView: 0x17d37d20; frame = (15 15; 50 50); hidden = YES; opaque = NO; userInteractionEnabled = NO; layer = <CALayer: 0x17f8f4c0>> is hidden: 1

将uiimage设置为nil od,alpha为0.0也没有效果。我做错了什么?

2 个答案:

答案 0 :(得分:3)

您可能有多个UIImageView实例,但只能引用最新实例。当你隐藏它时,你会看到下面的旧实例(如果它们显示相同的图像)看起来像隐藏没有工作。

因此,您需要确保在旧实例上调用removeFromSuperview,或者需要确保您不会创建多个实例。

答案 1 :(得分:0)

您的问题是您在每个uitableview单元格中创建self.icon。 每次都为init分配图标,以便self.icon保存你分配init的最后一个对象。如果你隐藏了self.icon,那么它会隐藏最后一个对象。

所以如果你想隐藏一些图像视图,只需在你的隐藏图标方法中传递这个对象

-(void)hideIcon : (UIImageView *)imageView{
    dispatch_async(dispatch_get_main_queue(), ^{
       [imageView setHidden:true];
    });
}

当你想要隐藏

时调用它