Swift3 iOS – 如何使UITapGestureRecognizer触发器function

我试图添加一个UITapGesture到一个UIButton,所以它会触发一个function,当点击。 我正在使用Swift 3并出现一些错误:

终止应用程序由于未捕获的exception'NSInvalidArgumentException',原因:' – [SwiftRunner.ViewController tapBlurButton]:无法识别的select发送到实例0x149e07610'

这大致是我所拥有的:

 // Swift 3 import UIKit class ViewController { @IBOutlet weak var qsBlurButton: UIButton! override func viewDidLoad() { super.viewDidLoad() let tapGesture = UITapGestureRecognizer(target: self, action: Selector(("tapBlurButton"))) qsBlurButton.addGestureRecognizer(tapGesture) } func tapBlurButton(sender: UITapGestureRecognizer) { print("Please Help!") } } 

从你的代码中使用swift 3.0,所以改变你的selector语法就像这样

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(_:))) 

和你的function是这样的

 func tapBlurButton(_ sender: UITapGestureRecognizer) { print("Please Help!") } 

编辑:

不知道你使用button与轻按手势,而不是使用内置的方法addTarget的button不需要创build像这样的轻拍手势

 qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside) func tapBlurButton(_ sender: UIButton) { print("Please Help!") } 

Swift 3

在select器的func看起来像这样(注意:它没有_):

 func tapBlurButton(sender: UITapGestureRecognizer) { print("Please Help!") } 

然后select器看起来像这样:

 #selector(self.tapBlurButton(sender:)) 

所以select器的最终代码是这样的:

 let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:))) 

如果你没有指定第一个参数是_ ,那么你需要使用第一个参数的全名。

要添加手势识别器,您必须创build一个指示将调用哪个函数:

 let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:))) 

然后将其添加到您需要的元素。 (你正在使用一个button,而其他人已经解释button有他们的本地'addTarget'方法)

出于解释的目的,想象一下你想把它添加到UIView中:

 self.someView.addGestureRecognizer(tapGestureRecognizer) 

不要忘记,某些元素默认为“不是用户交互式”,因此您可能必须更改该属性:

 self.someView.isUserInteractionEnabled = true 

Swift 4中 ,函数需要@objc声明:

 @objc func handleTapFrom(recognizer : UITapGestureRecognizer) { // Some code... }