удалить все UIButton из подпредставления - PullRequest
5 голосов
/ 03 февраля 2010

Я программно добавляю пару кнопок UIB на мой взгляд. После нажатия одной из кнопок все они должны быть «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 ]

8 голосов
/ 03 февраля 2010

Более эффективным способом было бы добавить каждую кнопку в массив при ее создании, а затем, когда кнопка нажата, все кнопки в массиве вызывают метод -removeFromSuperView, например:

[arrayOfButtons makeObjectsPerformSelector:@selector(removeFromSuperView)];

Затем, после этого, вы можете либо сохранить кнопки в массиве и использовать их повторно, либо вызвать removeAllObjects для их освобождения. Затем вы можете начать заполнять его позже.

Это избавляет вас от необходимости обходить всю иерархию представлений в поисках кнопок.

8 голосов
/ 24 ноября 2010

Другой ответ только для справки:

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 голосов
/ 16 ноября 2012

Также попробуйте это очень просто:

 for (UIButton *btn in self.view.subviews){     
              [btn removeFromSuperview]; //remove buttons
    }
2 голосов
/ 03 февраля 2010
NSMutableArray *buttonsToRemove = [NSMutableArray array];
for (UIView *subview in self.view.subviews) {
    if ([subview isKindOfClass:[UIButton class]]) {
        [buttonsToRemove addObject:subview];
    }
}
[buttonsToRemove makeObjectsPerformSelector:@selector(removeFromSuperview)];

РЕДАКТИРОВАТЬ :
Я отредактировал свой ответ для лучшего решения.
Теперь объекты не удаляются из массива при его перечислении ...

...