我创建了两个按钮,一个按钮创建一个UILabel,另一个按钮删除创建的UILabel。
点击Button1时,我正在运行一个for循环,以创建四(4)个UILabel,我能够做到这一点。
在点击Button2时,我想删除我用Button1创建的所有UILabel。
旁注:我不想隐藏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.
}
}
使用上面的代码,我只能删除一个标签。
我需要帮助,在点击Button2时删除所有UILabel
答案 0 :(得分:1)
之所以会这样,是因为您仅对上一个创建的label实例进行引用,而仅删除了该实例。您需要标签阵列才能删除所有创建的标签。
ir.config_parameter
然后,当您需要创建新标签时,也将其附加到此数组中
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
答案 1 :(得分:0)
定义
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 = []