Swift3 iOS - 如何使 UITapGestureRecognizer 触发功能
Swift3 iOS - How to make UITapGestureRecognizer trigger function
我正在尝试将 UITapGesture
添加到 UIButton,以便在点击时触发功能。我正在使用 Swift 3
并出现一些错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SwiftRunner.ViewController tapBlurButton]: unrecognized selector sent to instance 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(_:)))
你的函数是这样的
func tapBlurButton(_ sender: UITapGestureRecognizer) {
print("Please Help!")
}
编辑:
不知道您正在使用带点击手势的按钮,而不是使用内置方法 addTarget
按钮无需像这样为其创建点击手势
qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)
func tapBlurButton(_ sender: UIButton) {
print("Please Help!")
}
Swift 3
如果选择器的 func
看起来像这样(注意:它没有 _):
func tapBlurButton(sender: UITapGestureRecognizer) {
print("Please Help!")
}
然后选择器看起来像这样:
#selector(self.tapBlurButton(sender:))
所以选择器的最终代码是这样的:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:)))
如果不指定第一个参数有_
,那么需要使用第一个参数的全名
要添加手势识别器,您必须创建一个指示它将调用哪个函数的识别器:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
然后将其添加到您需要的元素中。 (您正在使用一个按钮,正如其他人所解释的那样,按钮具有其本机 'addTarget' 方法)
出于解释的目的,假设您想将其添加到 UIView:
self.someView.addGestureRecognizer(tapGestureRecognizer)
并且不要忘记某些元素默认为 "not user interactive",因此您可能还需要更改 属性:
self.someView.isUserInteractionEnabled = true
In Swift 4 函数需要@objc 声明:
@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
// Some code...
}
我正在尝试将 UITapGesture
添加到 UIButton,以便在点击时触发功能。我正在使用 Swift 3
并出现一些错误:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[SwiftRunner.ViewController tapBlurButton]: unrecognized selector sent to instance 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(_:)))
你的函数是这样的
func tapBlurButton(_ sender: UITapGestureRecognizer) {
print("Please Help!")
}
编辑:
不知道您正在使用带点击手势的按钮,而不是使用内置方法 addTarget
按钮无需像这样为其创建点击手势
qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)
func tapBlurButton(_ sender: UIButton) {
print("Please Help!")
}
Swift 3
如果选择器的 func
看起来像这样(注意:它没有 _):
func tapBlurButton(sender: UITapGestureRecognizer) {
print("Please Help!")
}
然后选择器看起来像这样:
#selector(self.tapBlurButton(sender:))
所以选择器的最终代码是这样的:
let tapGesture = UITapGestureRecognizer(target: self, action: #selector(self.tapBlurButton(sender:)))
如果不指定第一个参数有_
,那么需要使用第一个参数的全名
要添加手势识别器,您必须创建一个指示它将调用哪个函数的识别器:
let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(self.handleTapFrom(recognizer:)))
然后将其添加到您需要的元素中。 (您正在使用一个按钮,正如其他人所解释的那样,按钮具有其本机 'addTarget' 方法)
出于解释的目的,假设您想将其添加到 UIView:
self.someView.addGestureRecognizer(tapGestureRecognizer)
并且不要忘记某些元素默认为 "not user interactive",因此您可能还需要更改 属性:
self.someView.isUserInteractionEnabled = true
In Swift 4 函数需要@objc 声明:
@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
// Some code...
}