从子视图中删除所有UIButton

时间:2010-02-03 10:30:14

标签: iphone objective-c uiview uibutton

我以编程方式在我的视图中添加了几个UIButtons。单击其中一个按钮后,它们都应该是“removeFromSuperView”或已发布,而不仅仅是一个。

for (int p=0; p<[array count]; p++) {  
    button = [[UIButton alloc] initWithFrame:CGRectMake(100,100,44,44)];  
    button.tag = p;  
    [button setBackgroundImage:[UIImage imageNamed:@"image.png"]   forState:UIControlStateNormal];    
    [self.view addSubview:button];    
    [button addTarget:self action:@selector(action:)   forControlEvents:UIControlEventTouchUpInside];  
}

现在这是应该删除所有按钮的部分。不只是一个。

-(void) action:(id)sender{  
    UIButton *button = (UIButton *)sender;  
    int pressed = button.tag;  
    [button removeFromSuperview];  
}

我希望有人可以帮我这个!

4 个答案:

答案 0 :(得分:8)

更有效的方法是在创建数组时将每个按钮添加到数组中,然后按下按钮时,让数组中的所有按钮调用-removeFromSuperView方法,如下所示:

[arrayOfButtons makeObjectsPerformSelector:@selector(removeFromSuperView)];

然后,您可以将按钮保留在数组中并重复使用它们,或者调用removeAllObjects释放它们。然后你可以稍后再开始填充它。

这使您无需遍历整个视图层次结构来查找按钮。

答案 1 :(得分:8)

另一个答案仅供参考:

for (int i = [self.view.subviews count] -1; i>=0; i--) {
    if ([[self.view.subviews objectAtIndex:i] isKindOfClass:[UIButton class]]) {
        [[self.view.subviews objectAtIndex:i] removeFromSuperview];
    }
}

答案 2 :(得分:2)

NSMutableArray *buttonsToRemove = [NSMutableArray array];
for (UIView *subview in self.view.subviews) {
    if ([subview isKindOfClass:[UIButton class]]) {
        [buttonsToRemove addObject:subview];
    }
}
[buttonsToRemove makeObjectsPerformSelector:@selector(removeFromSuperview)];

修改
我已经编辑了我对更好解决方案的答案 现在,枚举它时,对象不会从数组中删除......

答案 3 :(得分:2)

另外试试这个很简单:

 for (UIButton *btn in self.view.subviews){     
              [btn removeFromSuperview]; //remove buttons
    }