代码之家  ›  专栏  ›  技术社区  ›  Sylar

swift 4-uitapGestureRecognizer选择器函数未调用

  •  1
  • Sylar  · 技术社区  · 6 年前

    我试图在标签上添加一个“点击事件”,而不是按钮。我不使用故事板。

    [...]
    
    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-->>>>>>>>>")
    }
    
    [...]
    

    在iPhone6S模拟器中,当我用鼠标模拟点击时,控制台内部没有任何东西在打印。我错过什么了吗?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Glenn Posadas    6 年前

    你需要把你的 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

    希望这有帮助!:)