我以编程方式在我的视图中添加了几个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];
}
我希望有人可以帮我这个!
答案 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
}