Swift - Добавить и удалить UILabel на кнопке - PullRequest
0 голосов
/ 03 апреля 2019

Я создал две кнопки: одну для создания UILabel и другую для удаления созданной UILabel.

При нажатии кнопки 1 я запускаю цикл for, чтобы создать четыре (4) метки UILabel, и я могу это сделать.

При нажатии Button2 я хочу удалить все метки UILabel, созданные с помощью Button1.

Sidenote: я не хочу скрывать UILabels, так как переменная 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.
}
}

С помощью приведенного выше кода я могу удалить только одну метку.

Мне нужно помочь удалить все UILabel при нажатии кнопки2

Ответы [ 2 ]

1 голос
/ 03 апреля 2019

Это происходит потому, что у вас есть ссылка только на последний созданный экземпляр метки, и вы удалили только этот.Вам нужен массив меток, чтобы можно было удалить все созданные метки.

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()
}
0 голосов
/ 03 апреля 2019

определить

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 = []
...