Подтвердить что ты не робот

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!")
   }
}
4b9b3361

Ответ 1

Из вашего кода вы используете swift 3.0, поэтому измените синтаксис selector следующим образом

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

и ваша функция, подобная этой

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

Edit:

Не знаю, что вы используете кнопку с жестом tap, вместо того, чтобы использовать встроенный метод addTarget для кнопки, не нужно создавать жест выделения для него, как этот

qsBlurButton.addTarget(self, action: #selector(self.tapBlurButton(_:)), forControlEvents: .TouchUpInside)

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

Ответ 2

Swift 3

В случае, когда func для селектора выглядит следующим образом (примечание: оно не имеет _):

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

Затем селектор выглядит следующим образом:

#selector(self.tapBlurButton(sender:))

Таким образом, окончательный код для селектора:

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

Если вы не укажете, что первый параметр имеет _, вам необходимо использовать полное имя первого параметра.

Ответ 3

Чтобы добавить распознаватель жестов, вам нужно создать один, указывающий, какую функцию он вызывать:

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