2012-01-12 85 views
1

我想删除我的屏幕上的所有小精灵(UIImageViews的)用下面的代码删除所有实例除去。实际上,视图中的所有内容都被删除了。从上海华

这是怎么回事?

回答

3

这不是如何在循环工作。仅仅因为你指定了一个类型,并不意味着只有该类型的对象才会受到影响。 subviews中的每个视图都会对removeFromSuperview作出响应,因此无论它被投射为什么,它仍会被删除。

如果你只想删除Sprite对象,那么你需要检查每个对象的类。

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

在这种情况下,子视图包含一切(精灵和其他对象)。你的枚举不仅返回精灵 - 它返回所有东西(但是松散地将它们转换成精灵)。在这种情况下,子视图的所有内容都会响应removeFromSuperview方法 - 因此所有内容都将被删除。

当您循环浏览子视图以确定是否需要删除时,您需要检查对象的类型。

0

您的代码在self.view的所有子视图上调用removeFromSuperview,因此它在写入时正常工作。这段代码运行的原因是因为Sprite可能是UIView的一个子类,所以编译器不会错误/警告你。你需要做的是更多这样的:

-(IBAction)clearAll:(id)sender{ 
    for (UIView *aSubview in self.view.subviews){ 
    if ([aSubview isSubclassOf 
    [sprite removeFromSuperview]; 
} 
1

我们可以使用下面的语句它的父删除的UIView类型的所有实例。

[[self.view subviews] makeObjectsPerformSelector:@selector(removeFromSuperview)]; 

它看起来更干净,更简单,而不是做一个循环。