Я создаю Swift Playground в Xcode, и у меня проблема с помещением TapGestureRecognizer в UILabel ...
class MyViewController : UIViewController {
override func loadView() {
func tapped() {
print("The label was tapped!")
}
let label11 = UILabel()
label11.frame = CGRect(x: -350, y: 360, width: 350, height: 20)
label11.text = "name."
label11.textColor = .black
label11.isUserInteractionEnabled = true
view.addSubview(label11)
let tap = UITapGestureRecognizer(target: self, action: "tapped")
label11.addGestureRecognizer(tap)
}
}





Похоже, что вы создаете контроллер представления программно, поскольку вы работаете исключительно в loadView (где вы правильно не вызывали super), что требует от вас создания фактического view этого контроллера.
import UIKit
import PlaygroundSupport
class MyViewController: UIViewController {
override func loadView() {
view = UIView()
let label11 = UILabel()
label11.frame = CGRect(x: 0, y: 360, width: 350, height: 20)
label11.text = "name."
label11.textColor = .yellow
label11.isUserInteractionEnabled = true
view.addSubview(label11)
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
label11.addGestureRecognizer(tap)
}
@objc func tapped() {
print("The label was tapped!")
}
}
PlaygroundPage.current.liveView = MyViewController()
В качестве альтернативы вы можете реплицировать непрограммный контроллер представления с помощью viewDidLoad (что требует вызова super).
import UIKit
import PlaygroundSupport
class MyViewController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
let label11 = UILabel()
label11.frame = CGRect(x: 0, y: 360, width: 350, height: 20)
label11.text = "name."
label11.textColor = .yellow
label11.isUserInteractionEnabled = true
view.addSubview(label11)
let tap = UITapGestureRecognizer(target: self, action: #selector(tapped))
label11.addGestureRecognizer(tap)
}
@objc func tapped() {
print("The label was tapped!")
}
}
PlaygroundPage.current.liveView = MyViewController()
Кроме того, ваше значение origin-x было за пределами допустимого диапазона, поэтому вы, возможно, не видели метку, и вам не хватало синтаксиса @objc, который требуется в Swift 4.
Решение viewDidLoad здесь - лучший подход.
Для тех, кто не знает, чтобы увидеть контроллер представления на игровой площадке, перейдите по ссылке
View>Assistant Editor>Show Assistant Editor.