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!")
}
}
Ответы
Ответ 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...
}