【问题标题】:Swift - Add and Remove UILabel on button tapSwift - 在按钮点击时添加和删除 UILabel
【发布时间】:2019-08-25 02:42:19
【问题描述】:

我创建了两个按钮,一个用于创建 UILabel,另一个用于删除创建的 UILabel。

在点击 Button1 时,我正在运行一个 for 循环,以创建四 (4) 个 UILabel,我能够做到这一点。

点击 Button2 时,我想删除我使用 Button1 创建的所有 UILabel。

旁注:我不想隐藏 UILabel,因为变量“noOfLabels”可以根据需要从 4 增加到 15 或任何其他数字。

这是我尝试过的。

class ViewController: UIViewController {
   var myLabel : UILabel!
   var noOfLabels = 4
    @IBAction func addButton(_ sender: Any) {

    if(myLabel != nil && !myLabel.isHidden)
    {
        myLabel.removeFromSuperview()
    }
    print("AddLabel button is Tapped")
    var yval = 0
    for i in 0...noOfLabels
    {
        myLabel = UILabel()
        myLabel.frame =  CGRect(x: 30, y: 200 + yval, width: 90, height: 50)
        myLabel.text = "Hello \(i)"
        view.addSubview(myLabel)
        yval += 80
    }
}

@IBAction func removeButton(_ sender: Any) {

    print("Remove button is Tapped")
    myLabel.removeFromSuperview()

}
override func viewDidLoad() {
    super.viewDidLoad()
}
override func didReceiveMemoryWarning() {
    super.didReceiveMemoryWarning()
    // Dispose of any resources that can be recreated.
}
}

使用上面的代码,我只能删除一个标签。

我需要帮助在点击 Button2 时删除所有 UILabel

【问题讨论】:

  • 您想在按下添加按钮时只添加一个新标签吗?您想在按下删除按钮时删除最后一个标签还是删除所有标签?
  • 您只能删除最后一个标签,因为 myLabel 指向最后一个。请在数组中设置 4 个标签,而不是更改 myLabel。

标签: ios swift uibutton uilabel


【解决方案1】:

发生这种情况是因为您只引用了最后创建的标签实例,而您只删除了这个。您需要标签数组才能删除所有创建的标签。

var labels = [UILabel]()

那么当你需要创建新标签时,也将它附加到这个数组中

@IBAction func addButton(_ sender: Any) {

    labels.forEach { $0.removeFromSuperview() }
    labels.removeAll()

    for i in 0...noOfLabels {
        let newLabel = UILabel(frame: CGRect(x: 30, y: 200 + (i * 80), width: 90, height: 50)) // <--- new instance
        newLabel.text = "Hello \(i)"
        view.addSubview(newLabel)
        labels.append(newLabel) // <--- appending to an array
    }
}

然后,当您需要从其父视图中删除所有标签时,只需遍历 labels 数组

@IBAction func removeButton(_ sender: Any) {
    labels.forEach { $0.removeFromSuperview() }
    labels.removeAll()
}

【讨论】:

    【解决方案2】:

    定义

    var labelList: [Label] = []
    

    addButton(_ sender: Any) {
    ...
    view.addSubview(myLabel)
    labelList.append(myLabel)
    ...
    }
    
    
    @IBAction func removeButton(_ sender: Any) {
    
    print("Remove button is Tapped")
    for i in 0...noOfLabels
    {
        labelList[i].removeFromSuperview()
    
    }
    labelList = []
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-01-22
      • 2018-07-22
      • 1970-01-01
      • 2018-01-27
      • 1970-01-01
      • 2018-01-06
      • 2018-06-02
      相关资源
      最近更新 更多