I’m making my first project that is a truth or dare game but when I tap the button to print a Truth/dare the labels are getting stacked on each other. How do I make it that the previous label disappear and the new one is there alone. Thanks in advance
import UIKit
import PlaygroundSupport
public class ViewController: UIViewController {
public override func loadView() {
//adding baground
super.loadView()
let view = UIView()
view.backgroundColor = .red
self.view = view
//dare button
let dareButton = UIButton(frame: CGRect(x:300, y: 500, width: 100, height: 69))
dareButton.layer.cornerRadius = 10
dareButton.backgroundColor = #colorLiteral(red: 0.6352941393852234, green: 0.6470588445663452, blue: 0.886274516582489, alpha: 1.0)
dareButton.setTitle("dare", for: UIControl.State.normal)
dareButton.isUserInteractionEnabled = true
dareButton.addTarget(self, action: #selector(dareButtonDidTap), for: .touchDown)
view.addSubview(dareButton)
self.view = view
view.addSubview(dareButton)
}
@objc
private func dareButtonDidTap() {
let lbl = UILabel(frame: CGRect(x:95 , y:100, width: 325, height: 500))
lbl.text = daresEng.randomElement()
lbl.textColor = #colorLiteral(red: 0.6313725709915161, green: 0.6470588445663452, blue: 0.9058823585510254, alpha: 1.0)
lbl.numberOfLines = 6
view.addSubview(lbl)
}
}
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = ViewController()
CodePudding user response:
The labels are stacked because you create a new label and add it to the view each time you click the dareButton, and the previous labels are not removed from the superView. So you can move the label to the class level and add it to the view in loadView(). This way you only have one label, and in the dareButtonDidTap(), you only have to change the text of this label.
import UIKit
import PlaygroundSupport
public class ViewController: UIViewController {
let lbl = UILabel(frame: CGRect(x:95 , y:100, width: 325, height: 500))
public override func loadView() {
//adding baground
super.loadView()
let view = UIView()
view.backgroundColor = .red
self.view = view
//dare button
let dareButton = UIButton(frame: CGRect(x:300, y: 500, width: 100, height: 69))
dareButton.layer.cornerRadius = 10
dareButton.backgroundColor = #colorLiteral(red: 0.6352941393852234, green: 0.6470588445663452, blue: 0.886274516582489, alpha: 1.0)
dareButton.setTitle("dare", for: UIControl.State.normal)
dareButton.isUserInteractionEnabled = true
dareButton.addTarget(self, action: #selector(dareButtonDidTap), for: .touchDown)
view.addSubview(dareButton)
self.view = view
view.addSubview(lbl)
view.addSubview(dareButton)
}
@objc
private func dareButtonDidTap() {
lbl.text = daresEng.randomElement()
lbl.textColor = #colorLiteral(red: 0.6313725709915161, green: 0.6470588445663452, blue: 0.9058823585510254, alpha: 1.0)
lbl.numberOfLines = 6
}
}
PlaygroundPage.current.needsIndefiniteExecution = true
PlaygroundPage.current.liveView = ViewController()
