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

Posted

技术标签:

【中文标题】如何删除我使用循环创建的多个按钮?【英文标题】:How to remove multiple buttons that I created with a loop? 【发布时间】:2016-05-12 14:21:42 【问题描述】:

解释:

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()

问题:

但是这没有任何作用,我尝试给按钮一个标签并通过 tag == tagId 删除按钮,但什么也没发生。

我可以删除所有视图,但它会删除其他所有内容,

我试过了,但还是没有发生任何事情

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

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

【问题讨论】:

您还可以通过为每个按钮分配tag 值来删除按钮。 【参考方案1】:

轻松修复:

1) 在类内部,在任何函数之外:

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()

解释:

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

【讨论】:

【参考方案2】:

我希望它可以帮助您在添加删除该按钮时为您的按钮添加标签

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


【讨论】:

【参考方案3】:

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

【讨论】:

虽然我接受了上述解决方案,但您对理解问题的解释很有帮助。谢谢你 欢迎您,不确定谁投了反对票,接受的答案是在之后添加的,只是这个没有太多解释

以上是关于如何删除我使用循环创建的多个按钮?的主要内容,如果未能解决你的问题,请参考以下文章

如何添加多个视图和删除视图并在删除后从视图中获取所有数据?

R Shiny:如何使多个元素在添加/删除按钮上下文中具有反应性?

[php内的html表单进行循环-编辑/删除按钮

如何删除视图和更新约束?

如何在jquery中使用类追加和删除字段

删除或隐藏动态创建的链接标签和标签