单击下一个按钮时动态生成按钮并删除所有按钮生成

时间:2018-01-08 21:09:20

标签: ios swift

我想在for循环中动态创建按钮。当循环运行时,假设它运行3次我想创建3个按钮,当完成后,当我单击下一个按钮时,它应该删除这些按钮并根据它循环的次数创建新按钮。多数民众赞成我的问题,我已经尝试了几天没有运气可以有人帮助我,或者问题的最佳解决方案,谢谢你的进步。 我也在查看这篇文章Remove UIButton Programmatically in swift ,但我仍然无法完成此任务。 请参阅下面的代码:

func createButton(){

    let button = UIButton()

     button.frame = CGRect(x: 15, y: buttonY, width: 200, height: 30)
     buttonY = self.buttonY + 50
     button.setTitle("Button", for: UIControlState.normal)
     button.layer.cornerRadius = 10
     button.backgroundColor = UIColor.blue
     button.backgroundColor = .green
     button.addTarget(self, action: #selector(buttonAction), for: UIControlEvents.touchUpInside)
     view.addSubview(button)

     //buton.removeFromSuperview()
}

@objc func buttonAction(sender: UIButton!) {
     print("Button tapped: ")
 }

@IBAction func nextButton(_ sender: Any) {

   test(value: "remove")
}



func generateButton(){
 for i in 1...3{
  createButton()
 }

}

func generateButton(){
 for i in 1...3{
  createButton()
 }

}

1 个答案:

答案 0 :(得分:0)

这是一种方法,但还有其他方法取决于您使用按钮的方式。

首先,您需要保留对您创建的按钮的引用,以便以后可以删除它们,以便在您的类中添加如下的实例变量:

var buttonList: [UIButton] = []

然后更改createButton方法以返回它创建的按钮,如下所示:

func createButton() -> UIButton {

    let button = UIButton()

     button.frame = CGRect(x: 15, y: buttonY, width: 200, height: 30)
     buttonY = self.buttonY + 50
     button.setTitle("Button", for: UIControlState.normal)
     button.layer.cornerRadius = 10
     button.backgroundColor = UIColor.blue
     button.backgroundColor = .green
     button.addTarget(self, action: #selector(buttonAction), for: UIControlEvents.touchUpInside)
     view.addSubview(button)

    return button
}

然后您可以使用这些功能生成按钮并删除按钮并根据需要调用它们:

func generateButtons() {
    for loop in 0..<3 {
        self.buttonList.append(self.createButton())
    }
}

func removeButtons() {
    for button in self.buttonList {
        button.removeFromSuperview()
    }
    self.buttonList.removeAll()
}