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... }