【问题标题】:Why UITapGestureRecognizer does not work if we make it become the member variable of a class? [duplicate]为什么 UITapGestureRecognizer 不工作,如果我们让它成为一个类的成员变量? [复制]
【发布时间】:2021-07-08 03:40:20
【问题描述】:

我想知道,为什么UITapGestureRecognizer 不起作用,如果我们让它成为一个类的成员变量?

不工作。点击时不调用 hideKeyboard

class TabInfoSettingsCell: UICollectionViewCell {
    
    private let hideKeyboardTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))

    override func awakeFromNib() {
        super.awakeFromNib()
        
        self.isUserInteractionEnabled = true
        self.addGestureRecognizer(hideKeyboardTapGestureRecognizer)
    }

    @objc private func hideKeyboard() {
        print("hide keyboard")
    }

工作

class TabInfoSettingsCell: UICollectionViewCell {
    
    override func awakeFromNib() {
        super.awakeFromNib()
        
        self.isUserInteractionEnabled = true
        let hideKeyboardTapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(hideKeyboard))
        self.addGestureRecognizer(hideKeyboardTapGestureRecognizer)
    }

    @objc private func hideKeyboard() {
        print("hide keyboard")
    }

你知道背后的原因是什么,为什么 UITapGestureRecognizer 如果我们让它成为一个类的成员变量就不起作用?

【问题讨论】:

标签: ios swift


【解决方案1】:

属性初始化器在类初始化器之前运行。这意味着self(本例中为类的实例)在类初始化之前(属性初始化时)不可用。

如果您改为将其设为lazy var,它将在 init 运行后的生命周期后期执行,并且将按预期工作。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多