阵列中的UIImage>如何删除它

时间:2014-02-05 15:12:52

标签: ios objective-c uiimageview uiimage

我有一个UIImages数组,我在这样的UIViews中显示

UIImage *image=[self.currentAlphabet objectAtIndex:i ];
UIImageView *imageView=[[UIImageView alloc]initWithFrame:CGRectMake(xPos, yPos, imageWidth, imageHeight)];
imageView.image=image;
[self.view addSubview:imageView];

现在我想要从视图中删除这些图像。我认为它应该像这样工作

UIImage *image=[self.currentAlphabet objectAtIndex:i ];
UIImageView *imageView=[[UIImageView alloc]initWithImage:image];
[imageView removeFromSuperview];

但它不能像那样工作......我是否需要在数组中保存UIImageViews,或者是否有任何解决方案需要更少的代码更改?

3 个答案:

答案 0 :(得分:2)

您正在创建一个全新的视图对象(不在层次结构中),然后将其从视图层次结构中删除。它不适用于这个原因。

您必须删除之前添加到视图层次结构中的视图对象(在第一个代码段中)。

基本上,您必须跟踪这些视图:将它们也存储在NSMutableArray中,使用tag的{​​{1}}属性或使用实例变量。 这取决于您必须向层次结构添加多少视图。如果你有一些,实例变量就可以了。如果您有很多,请使用UIView

例如,使用辅助NSMutableArray

NSMutableArray

稍后(我想在这一点上你知道要删除的对象的索引):

UIImage *image = [self.currentAlphabet objectAtIndex:i];
UIImageView *imageView = [[UIImageView alloc] initWithFrame:CGRectMake(xPos, yPos, imageWidth, imageHeight)];
imageView.image = image;
[self.view addSubview:imageView];
[imageViewArray addObject:imageView];

答案 1 :(得分:0)

只要视图中的唯一图片视图是您要删除的图片视图,删除它们的简单方法如下:

for (UIView *view in self.view.subviews) {
    if ([view isKindOfClass:[UIImageView class]]) {
        [view removeFromSuperview];
    }
}

答案 2 :(得分:0)

你正在做的是创建一个新的UIImageView实例,甚至没有将它添加到你的视图heirarchy你正在删除它。

UIImage *image=[self.currentAlphabet objectAtIndex:i ];
UIImageView *imageView=[[UIImageView alloc]initWithImage:image];// It's a fresh new ImageView
[imageView removeFromSuperview];

你能做的是......

1)如果视图中只有一个ImageView,那么在.h文件中为UIImageView创建一个类变量..

UIImageView *yourImageView; // in .h file

yourImageView.image = //Set Image here.

yourImageView.image = nil; // For removing the image.

2)或者如果你不想为它创建一个Class变量..只需给你的ImageVIew标记...并使用UIView的viewWithTag方法访问它。

yourImageView.tag = 2;

并按照以下方式访问它。

UIImageView *imageViewRef =  [self.view viewWithTag:2];
[imageViewRef removeFromSuperView];

希望这会对你有帮助..