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

时间:2016-05-12 14:21:43

标签: ios swift uiview uibutton

说明

1)我启动课程上方的按钮:

var myButton = UIButton()

2)然后我根据数组中的项目数量创建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:

然而这没有任何作用,我尝试给按钮添加一个标签,并按标签== tagId删除按钮,但没有发生任何事情。

我可以删除所有视图但删除其他所有视图

我尝试了这一点,但没有任何事情发生

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

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

3 个答案:

答案 0 :(得分:2)

你在循环时重新分配myButton变量。

删除此行:

var myButton = UIButton()

在顶部添加一个属性来按住按钮:

var buttons:[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()将删除您创建的最后一个。按照我建议的方式进行操作意味着您创建一个按钮并将其添加到按钮数组中,以便稍后您可以依次遍历引用每个按钮的数组并将其删除。

答案 1 :(得分:2)

我希望在您添加删除按钮

时为您的按钮添加标记会有所帮助
     for button in self.view.subviews {
  if button.tag == 100 {
    button.removeFromSuperview()
}
}

答案 2 :(得分:2)

EASY FIX:

1)Inside Class,out of 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()
}

说明:

如果您希望一次轻松删除所有元素,请始终在数组中存储使用循环创建的元素。