swift-Swift3 iOS-如何使UITapGestureRecognizer触发功能

我试图将UITapGesture添加到UIButton,以便在点击时将触发功能。 我正在使用Swift 3并收到一些错误:

由于未捕获的异常'NSInvalidArgumentException'而终止应用程序,原因:'-[[SwiftRunner.ViewController tapBlurButton]:无法识别的选择器发送到实例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!")
   }
}
Sebbe asked 2020-06-20T17:20:07Z
3个解决方案
105 votes

从您的代码中,您正在使用swift 3.0,因此请像这样更改您的addTarget语法

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!")
}
Nirav D answered 2020-06-20T17:20:35Z
9 votes

迅捷3

如果选择器的_看起来像这样(请注意:它没有_):

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

然后选择器如下所示:

#selector(self.tapBlurButton(sender:))

因此,选择器的最终代码如下:

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

如果未指定第一个参数具有_,则需要使用第一个参数的全名。

skymook answered 2020-06-20T17:21:13Z
6 votes

要添加手势识别器,您必须创建一个手势识别器,以指示它将调用的功能:

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

然后将其添加到所需的元素。 (您正在使用按钮,并且正如其他人所解释的那样,按钮具有其本机的“ addTarget”方法)

出于说明目的,假设您要将其添加到UIView中:

self.someView.addGestureRecognizer(tapGestureRecognizer)

并且不要忘记默认情况下某些元素是“非用户交互的”,因此您可能也必须更改该属性:

self.someView.isUserInteractionEnabled = true

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

@objc func handleTapFrom(recognizer : UITapGestureRecognizer)
{
    // Some code...
}
Pochi answered 2020-06-20T17:21:50Z
translate from https://stackoverflow.com:/questions/38829151/swift3-ios-how-to-make-uitapgesturerecognizer-trigger-function