Ios 如何删除重复按钮

Ios 如何删除重复按钮,ios,objective-c,Ios,Objective C,我用for循环创建了五个按钮,效果很好。每当我单击“重新启动”按钮时,都会创建重复的按钮 -(void)buttonCreate { for( int i = 0; i < 5; i++ ) { oneBtn1 = [UIButton buttonWithType:UIButtonTypeCustom]; oneBtn1.frame = CGRectMake(316,i*-5+474,51,50); [oneBtn1 setTag:i]; [oneB

我用for循环创建了五个按钮,效果很好。每当我单击“重新启动”按钮时,都会创建重复的按钮

-(void)buttonCreate {
  for( int i = 0; i < 5; i++ )
  {
    oneBtn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    oneBtn1.frame = CGRectMake(316,i*-5+474,51,50);
    [oneBtn1 setTag:i];
    [oneBtn1 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchUpInside];
    [oneBtn1 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
    [self.view addSubview:oneBtn1];
  }
}
我试过这个,但它只会删除5个按钮中的一个

if(oneBtn1 != NULL) {
    [oneBtn1 removeFromSuperview];
    oneBtn1 = nil;
}
问题是:如何删除重复按钮?

创建一个数组(
NSMutableArray*buttonHolderArray
)以容纳所有五个按钮的插座

[buttonHolderArray addObject:oneBtn1];
然后,您可以根据需要删除/更新按钮

一旦你不需要任何按钮,清空数组本身。除此之外,如果要清除视图,只需调用所有按钮的
removeFromSuperView

I tried this one but it will remove only one button out of 5.

if(oneBtn1 != NULL) {
    [oneBtn1 removeFromSuperview];
    oneBtn1 = nil;
}
您只删除一个按钮,如果要删除所有按钮,请使用

for ( UIButton *button in buttonHolderArray){
      button removeFromSuperView];
}

再次调用重新启动方法之前请使用此选项

for (UIButton *btn in self.view.subviews ) {

        [btn removeFromSuperview];
    }

单击“重新启动”按钮之前,您可以从调用方法的视图中删除所有按钮
removeChildViewsWithKindOfClass

-(void)restart {
    [self.view removeChildViewsWithKindOfClass:[UIButton class]];
    [self buttonCreate];
}

-(void)removeChildViewsWithKindOfClass:(Class)classToRemove{
    if (classToRemove==nil) return;

    for (UIView *v in [self subviews]) {
        if ([v isKindOfClass:classToRemove]) {
            [v removeFromSuperview];
        }
    }
}

如果要删除特定按钮,可以使用创建按钮时必须事先设置的属性
标记
,它允许您删除带有特定标记的按钮。

您可以通过检查按钮是否已创建来删除

-(void)buttonCreate {
  int tag_start = 500;
  for( int i = 0; i < 5; i++ )
  {
    UIView * prevbtn = [self.view viewWithTag:tag_start + i];
    if(prevbtn) {
         [prevbtn removeFromSuperview];
    }

    oneBtn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    oneBtn1.frame = CGRectMake(316,i*-5+474,51,50);
    [oneBtn1 setTag:tag_start + i];
    [oneBtn1 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchUpInside];
    [oneBtn1 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
    [self.view addSubview:oneBtn1];
  }
}
-(无效)按钮创建{
int tag_start=500;
对于(int i=0;i<5;i++)
{
UIView*prevbtn=[self.view view withtag:tag_start+i];
如果(prevbtn){
[prevbtn removeFromSuperview];
}
oneBtn1=[UIButton按钮类型:UIButtonTypeCustom];
oneBtn1.frame=CGRectMake(316,i*-5+474,51,50);
[oneBtn1 setTag:tag_start+i];
[oneBtn1 addTarget:self action:@selector(oneButton:)for ControlEvents:UIControlEventTouchUpInside];
[oneBtn1 setImage:[UIImage ImageName:@“1c.png”]用于状态:UIControlStateNormal];
[self.view addSubview:oneBtn1];
}
}

您想做什么?如何在buttonCreate()函数中使用我在上面为循环指定的array创建五个按钮足够创建五个按钮。如何将按钮从数组显示到viewcontroller。因为我用一个名称显示整个按钮。如何添加按钮而不是UIVIEW?什么意思?您可以使用代码添加按钮。我发布的方法是将它们从superview中删除。但是标记开始是什么意思?如果我删除了那个按钮,我的uiview显示黑色屏幕标签只是为最后一个按钮添加一些独特的标签。如果未添加,则第一个按钮的标记为0。这是默认值。如果要执行任何与标记相关的操作,则需要为视图指定唯一的标记。我尝试使用相同的过程创建另一个五按钮(fiveBtn1)。它也可以工作,但删除了一个BTN1。
-(void)buttonCreate {
  int tag_start = 500;
  for( int i = 0; i < 5; i++ )
  {
    UIView * prevbtn = [self.view viewWithTag:tag_start + i];
    if(prevbtn) {
         [prevbtn removeFromSuperview];
    }

    oneBtn1 = [UIButton buttonWithType:UIButtonTypeCustom];
    oneBtn1.frame = CGRectMake(316,i*-5+474,51,50);
    [oneBtn1 setTag:tag_start + i];
    [oneBtn1 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchUpInside];
    [oneBtn1 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
    [self.view addSubview:oneBtn1];
  }
}