Swift 4-UITapGestureRecognizer选择器函数未调用

时间:2019-01-08 06:31:19

标签: ios swift4 swift4.2

我正在尝试向标签而非按钮添加“点击事件”。我没有使用情节提要。

[...]

let registerLabel: UILabel = {
    let label = UILabel()
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(openLoginView))
    tapGesture.numberOfTapsRequired = 1
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "Register"
    label.isUserInteractionEnabled = true
    label.addGestureRecognizer(tapGesture)
    label.textColor = Colors.lightGrey
    label.font = label.font.withSize(18)
    return label
}()

[...] // viewDidLoad()

@objc private func openLoginView(sender: UITapGestureRecognizer) {
    print("PRINT ME-->>>>>>>>>")
}

[...]

在iPhone 6s模拟器中,当我使用鼠标单击鼠标来模拟点击时,控制台内部没有任何打印内容。我想念什么吗?

1 个答案:

答案 0 :(得分:1)

您需要将registerLabel声明为惰性。像这样:

lazy var registerLabel: UILabel = {
    let label = UILabel(frame: CGRect(x: 200, y: 300, width: 200, height: 50))
    let tapGesture = UITapGestureRecognizer(target: self, action: #selector(openLoginView(sender:)))
    tapGesture.numberOfTapsRequired = 1
    label.translatesAutoresizingMaskIntoConstraints = false
    label.text = "Register"
    label.isUserInteractionEnabled = true
    label.addGestureRecognizer(tapGesture)
    label.textColor = .black
    label.font = label.font.withSize(18)
    return label
}()

如果需要对sender函数中的openLoginView进行操作,请看看我的选择器。

有关惰性存储属性

的更多信息
  

惰性存储属性是其初始值不是   直到第一次使用时才进行计算。您表示一个懒惰存储   属性,方法是在其声明之前编写lazy修饰符。

https://docs.swift.org/swift-book/LanguageGuide/Properties.html

我希望这会有所帮助! :)