轻拍手势识别器不工作.....?

use*_*097 2 uitapgesturerecognizer swift

我不得不创建一个新线程bcoz它让我发疯,所有其他在线答案都完全一样.我已经无数次地完成了这件事,但我无法看到我为生命而失踪的东西.我正在使用"测试"视图控制器只是为了让轻敲手势工作,但它根本不起作用...我相当确定我正确设置它,因为这是我一直在实现它的方式过去:(是的,我已经选中了isUserInteractionEnabled的方框).我甚至在一个不同的viewcontroller上以这种方式实现它,它正在工作......

class TestViewController: UIViewController {

override func viewDidLoad() {
    super.viewDidLoad()

    view.addGestureRecognizer(tap)
}

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))


@objc func wasTapped() {
    print("tapped")
}
Run Code Online (Sandbox Code Playgroud)

}

我也尝试将参数添加到wasTapped:

 @objc func wasTapped(gestureRecognizer: UITapGestureRecognizer) {
    print("tapped")
}
Run Code Online (Sandbox Code Playgroud)

mat*_*att 13

你是说:

override func viewDidLoad() {
    super.viewDidLoad()

    view.addGestureRecognizer(tap)
}

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
Run Code Online (Sandbox Code Playgroud)

问题是最后一行:

let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
Run Code Online (Sandbox Code Playgroud)

你不能只是let tap在偏僻的地方那样说。您正在隐式地创建一个实例属性。但是您不能以 为目标初始化实例属性self,因为self在初始化实例属性时不存在。(我认为该代码甚至可以编译为错误,并已将其报告为错误。)

将该行移动到 的开头viewDidLoad,如下所示:

override func viewDidLoad() {
    super.viewDidLoad()

    let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped))
    view.addGestureRecognizer(tap)
}
Run Code Online (Sandbox Code Playgroud)


Man*_*son 6

尝试这样的事情

override func viewDidLoad() {
    super.viewDidLoad()

     let tap = UITapGestureRecognizer(target: self, action: #selector(wasTapped(sender:)))
     tap.numberOfTapsRequired = 1 // Default value
     view.isUserInteractionEnabled = true
     view.addGestureRecognizer(tap)

}

@objc func wasTapped(sender: UITapGestureRecognizer) {
    print("tapped")
}
Run Code Online (Sandbox Code Playgroud)


MQL*_*QLN 5

如果您想使用标准的手势识别器,则必须启用UIView交互

view.isUserInteractionEnabled在你的viewDidLoad.