2016-05-12 89 views
2

说明:如何删除我用循环创建的多个按钮?

1)I启动按钮类以上:

var myButton = UIButton() 

2)I然后创建按钮的x量取决于有多少项目是在一个阵列

for letter in arrayOfLetters { 


      myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width: someFloat, height: someFloat)) 
      buttonX = buttonX + thirdFloat //spacing 


      myButton.layer.cornerRadius = 5 
      myButton.backgroundColor = UIColor.darkGrayColor() 
      myButton.setTitle("\(letter)", forState: UIControlState.Normal) 
      myButton.titleLabel?.text = "\(letter)" 
      myButton.addTarget(self, action: "myButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

      self.view.addSubview(myButton) 



     } 

3)稍后一旦用户按下正确的按钮,我调用一个函数来刷新,我想删除所有的按钮。这是这样我就可以根据新的数组

myButton.removeFromSuperview() 

ISSUE产生新的按钮:

然而这并没有什么,我试着给按钮的标签和标签删除按钮==标签识别,但什么也没发生。

我可以删除所有的观点,但删除一切,

我试过,但还是虚空happends

var buttons = [myButton] 
      for button in buttons as! [UIButton] { 
       button.removeFromSuperview() 
      } 

我要删除我添加了所有的按钮,我要么不删除它们,或删除视图中的所有内容

+0

您也可以通过为每个按钮分配'tag'值来移除按钮。 –

回答

2

EASY FIX:

1)内部类,任何FUNC的:

var buttonsArray = [UIButton]() 

2)这里声明myButton并添加append行:

for letter in arrayOfLetters { 


    var myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width:  someFloat, height: someFloat)) 

...

 self.buttonsArray.append(myButton) 
} 

3)要删除按钮:

for btn in buttonsArray { 
    btn.removeFromSuperview() 
} 

说明:

总是存储在你与循环,如果创建元素的数组您想要一次轻松删除所有这些文件。

+0

简单,简洁和工作 – user2389087

2

您在循环时重新分配myButton变量。在你的代码

var buttons:[UIButton]() 

再后来:

删除此行:

var myButton = UIButton() 

顶部添加属性按​​住按钮

for letter in arrayOfLetters { 


     var myButton = UIButton(frame: CGRect(x: buttonX, y: 500, width: someFloat, height: someFloat)) 
     buttonX = buttonX + thirdFloat //spacing 


     myButton.layer.cornerRadius = 5 
     myButton.backgroundColor = UIColor.darkGrayColor() 
     myButton.setTitle("\(letter)", forState: UIControlState.Normal) 
     myButton.titleLabel?.text = "\(letter)" 
     myButton.addTarget(self, action: "myButtonPressed:", forControlEvents: UIControlEvents.TouchUpInside) 

     self.view.addSubview(myButton) 

     self.buttons.append(myButton) 

    } 

那么你应该能够像这样移除:

for button in self.buttons { 
    button.removeFromSuperview() 
} 

这应该可以解决您的问题,但重要的是要明白问题所在,因此您可以使用以下代码行将新按钮定义为属性:var myButton = UIButton()。这持有一个按钮。当您循环创建按钮时,您将覆盖下一个按钮。

所以,如果有的话,调用myButton.removeFromSuperView()将删除您创建的最后一个。按照我所建议的方式进行操作意味着您创建一个按钮并将其添加到一组按钮中,以便您可以稍后迭代依次引用每个按钮并将其删除。

+0

虽然我接受了上述解决方案,但您对解决该问题的解释很有帮助。感谢这 – user2389087

+0

您的欢迎,不确定谁downvoted它,接受的答案后添加,只是这没有太多的解释 – Scriptable

2

我希望它会帮助你给标签为您的按钮,当您添加删除按钮

 for button in self.view.subviews { 
    if button.tag == 100 { 
    button.removeFromSuperview() 
} 
}