从superview中删除

时间:2011-11-07 22:39:28

标签: iphone objective-c xcode

一个小问题我真的遇到了很多问题

基本上,我每次点按一个工作正常的按钮时,我正在做的是查看。 当我想删除我从superview中删除时删除的所有图像时,它只删除堆栈中的最后一个。 有没有办法可以摆脱我制作的所有图像?

这是代码

这会将图片放在屏幕上

- (IBAction)pushBn:(id)sender {


    ZeldaView *newZelda = [[ZeldaView alloc]initWithNibName:@"ZeldaView" bundle:nil];

    theZeldaView=newZelda;
    [self.view insertSubview:theZeldaView.view atIndex:1];

}

当我触摸它时将其删除

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event{


    UITouch *touch =[touches anyObject];
    CGPoint location=[touch locationInView:theZeldaView.view];

    if (CGRectContainsPoint(theZeldaView.theImage.frame, location)) {

        [theZeldaView.view removeFromSuperview];

    }

}

2 个答案:

答案 0 :(得分:0)

当然,只需遍历父视图的子项(self.view)并删除任何ZeldaView元素。

最简单的就是:

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

虽然您可能希望扩展此操作以在迭代期间不执行实际删除,并且您可能希望使用respondsToSelector和自定义方法而不是在此处检查类,以便您可以在ZeldaView中进行所需的任何清理类。希望这对你有意义。

答案 1 :(得分:0)

当然,有很多方法可以做到这一点。我会保留一组ZeldaView个对象,当你想删除它们时,遍历数组并将它们全部删除。

你的.h:

中的

@property (nonatomic, retain) NSMutableArray *zeldaViews;

添加ZeldaView时:

// create a newZeldaView and add it to the superview
[self.zeldaViews addObject:newZeldaView];

当您想要全部删除它们时:

for (ZeldaView *zeldaView in self.zeldaViews) {
    [zeldaView.view removeFromSuperview];
}
[self.zeldaViews removeAllObjects];

在viewDidLoad中创建可变数组,并在viewDidUnload和dealloc中释放它。如果您使用ARC,请修改为approp。