2

这是我的按钮创建功能。

  -(void)buttonCreate {
  //oneBtn5 Button
  oneBtn5 = [UIButton buttonWithType:UIButtonTypeCustom];
  oneBtn5.frame = CGRectMake(316, 389, 51, 21);
  oneBtn5.tag = 5;
  [oneBtn5 setTitle:@"" forState:UIControlStateNormal];
  [oneBtn5 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchDown];
  [oneBtn5 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
  [self.view addSubview:oneBtn5];
}

我将使用 viewonload() 显示按钮,

- (void)viewDidLoad {
   [super viewDidLoad];
   [self buttonCreate];
 }

这是我的重新启动功能,如果我单击重新启动,将创建新按钮。

- (void)RestartAction {
    [self buttonCreate];
  }

我的问题是当我单击重新启动时如何删除重复的按钮。有什么办法可以解决这个问题。

4

6 回答 6

0

只需从它的超级视图中删除按钮:

-(void)buttonCreate {
    if (oneBtn5.superView) {
        [oneBtn5 removeFromSuperview];
    }
   ....
}
于 2013-09-26T08:24:38.830 回答
0
-(void)buttonCreate {
  //oneBtn5 Button
  if (oneBtn5 != null)
      [oneBtn5 removeFromSuperview];

  oneBtn5 = [UIButton buttonWithType:UIButtonTypeCustom];
  oneBtn5.frame = CGRectMake(316, 389, 51, 21);
  oneBtn5.tag = 5;
  [oneBtn5 setTitle:@"" forState:UIControlStateNormal];
  [oneBtn5 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchDown];
  [oneBtn5 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
  [self.view addSubview:oneBtn5];
}
于 2013-09-26T08:25:17.693 回答
0

您可以在 buttonCreate 中执行此操作

if(oneBtn5==nil)
{
     oneBtn5 = [UIButton buttonWith....];
     [self.view addsubview: oneBtn5;
}

按钮仅初始化并添加一次

于 2013-09-26T08:25:40.950 回答
0

如果它是财产,正如人们告诉你的那样,请检查它以前是否存在。

if(!self.oneBtn5){
     //instance of button
     self.oneBtn5 = [UIButton buttonWith....];
     [self.view addsubview: self.oneBtn5];

}else{
     //change stuff you need like text or frame

}

问题是您正在创建按钮的新实例,而不是重用前一个。

于 2013-09-26T08:33:48.490 回答
0

将此用作:

-(void)buttonCreate {
    if ([self.view.subviews containsObject:oneBtn5]) {
            [oneBtn5 removeFromSuperview];
        }
   // YOUR CODE HERE
}
于 2013-09-26T08:30:01.880 回答
0
-(void)buttonCreate {
  //oneBtn5 Button
  if (oneBtn5 ){
      [oneBtn5 removeFromSuperview];
       oneBtn5=nil;   // release the memory
      }

  oneBtn5 = [UIButton buttonWithType:UIButtonTypeCustom];
  oneBtn5.frame = CGRectMake(316, 389, 51, 21);
  oneBtn5.tag = 5;
  [oneBtn5 setTitle:@"" forState:UIControlStateNormal];
  [oneBtn5 addTarget:self action:@selector(oneButton:) forControlEvents:UIControlEventTouchDown];
  [oneBtn5 setImage:[UIImage imageNamed:@"1c.png"] forState:UIControlStateNormal];
  [self.view addSubview:oneBtn5];
}

您必须oneBtn = nil在之后写入[oneBtn5 removeFromSuperview] 以释放先前创建的按钮的内存。[oneBtn5 removeFromSuperview];从其超级视图中删除按钮但不会释放内存。您必须通过将其设置为来释放内存nil

于 2013-09-26T10:24:08.010 回答