【问题标题】: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 值来删除按钮。

标签: ios swift uiview uibutton


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

      【讨论】:

      • 虽然我接受了上述解决方案,但您对理解问题的解释很有帮助。谢谢你
      • 欢迎您,不确定谁投了反对票,接受的答案是在之后添加的,只是这个没有太多解释
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多