i'm programmatically adding a couple UIButtons to my view. After clicking one of the buttons they all should be 'removeFromSuperView' or released, not just one.
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];
}
Now this is the part where all buttons should be removed. Not just one.
-(void) action:(id)sender{
UIButton *button = (UIButton *)sender;
int pressed = button.tag;
[button removeFromSuperview];
}
I hope someone can help me with this one!
Managing Subviews To remove an arranged subview that you no longer want around, you need to call removeFromSuperview() on it. The stack view will automatically remove it from the arranged subview list.
A more efficient way would be to add each button to an array when you create it, and then when a button is pressed, have all the buttons in the array call the -removeFromSuperView
method like this:
[arrayOfButtons makeObjectsPerformSelector:@selector(removeFromSuperView)];
Then after that, you can either keep the buttons in the array and reuse them, or call removeAllObjects
to have them released. Then you can start populating it again later.
This saves you from having to walk through the entire view hierarchy looking for buttons.
Another answer just for reference:
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];
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With