从视图中删除按钮

时间:2011-01-04 00:55:04

标签: cocoa button view superview

有没有办法清除所有按钮的视图?我的代码每秒生成一次按钮,然后我创建了一个按钮,我希望将它们全部清除掉。当我尝试[brick.removeFromSuperview](砖是按钮的名称)时,它只删除了生成的最后一个按钮。

3 个答案:

答案 0 :(得分:3)

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

小心,这将从字面上删除指定视图中的所有按钮。所以你可能想要某种条件只删除生成的按钮。您可以通过在其他按钮上设置tag来区分生成的按钮,如果该按钮没有标记,则将其删除。

答案 1 :(得分:3)

您可以跟踪NSMutableArray中所有按钮的引用。

e.x。

NSMutableArray *buttons = [[NSMutableArray alloc] init];

// Button creation
UIButton *button = [[UIButton alloc] init...];
[yourView addSubview:button];
[buttons addObject:button];
[button release];

// Button removal
[buttons makeObjectsPerformSelector:@selector(removeFromSuperview)];
[buttons removeAllObjects];  // Alternatively, you could omit this line
                             // and recycle the buttons at a later time

此方法的一个优点(与仅枚举视图的子视图和查找按钮相反)是您不必担心从视图中删除不应该的UIButtons。例如,如果您不想删除“删除所有按钮”按钮,则不要将其添加到数组中。

答案 2 :(得分:1)

NSMutableArray * buttons = [[NSMutableArray alloc] init];

for( NSObject * btn in btn.superview.subviews )
{
  if( [btn isKindOfClass: [UIButton class]] )
    [buttons addObject: btn]; 
}

for( UIView * btn in buttons )
  [btn removeFromSuperview];

[buttons release];

临时数组是必需的,因为删除按钮会使枚举数无效,从而产生不可预测的结果。