我有一个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,或者是否有任何解决方案需要更少的代码更改?
答案 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];
希望这会对你有帮助..