Невозможно добавить UITapGestureRecognizer и UILongPressGestureRecognizer в UIButton - PullRequest
0 голосов
/ 25 апреля 2019

Я использую следующий фрагмент кода для добавления распознавателя жестов:

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(attachImage))
    let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress))
    tapGesture.numberOfTapsRequired = 1
    cell.image.addGestureRecognizer(tapGesture)
    cell.image.addGestureRecognizer(longGesture)

@objc func longPress(_ btn : UIButton) {
        selectedImageIndex = btn.tag
    }
@objc func attachImage(_ btn : UIButton) {
        selectedImageIndex = btn.tag
    }

Я получаю следующую ошибку, когда нажимаю кнопку

нераспознанный селектор, отправленный на экземпляр0x2802ec000

Ответы [ 2 ]

2 голосов
/ 25 апреля 2019

Измените функции следующим образом

@objc func longPress(_ sender : UILongPressGestureRecognizer) {
    if let btn = sender.view {
        selectedImageIndex = btn.tag
    }
}
@objc func attachImage(_ sender : UITapGestureRecognizer) {
    if let btn = sender.view {
        selectedImageIndex = btn.tag
    }
}

И изменить инициализацию жеста следующим образом

let tapGesture = UITapGestureRecognizer(target: self, action: #selector(attachImage(_:)))
let longGesture = UILongPressGestureRecognizer(target: self, action: #selector(longPress(_:)))
0 голосов
/ 25 апреля 2019

Если вы добавляете жест на imageView, вам нужно включить isUserInteractionEnabled.

imageView.isUserInteractionEnabled = true

И если вы добавляете жест на UIButton, тогда

@IBOutlet weak var button: UIButton!

override func viewDidLoad() {

    let tapGesture = UITapGestureRecognizer(target: self, #selector (tapGestureActionHandler(_:)))  //Tap function will call when user tap on button
    let longGesture = UILongPressGestureRecognizer(target: self, #selector(longGestureActionHandler(_:)))  //Long function will call when user long press on button.
    tapGesture.numberOfTapsRequired = 1
    button.addGestureRecognizer(tapGesture)
    button.addGestureRecognizer(longGesture)
}

@objc func tapGestureActionHandler(_ gesture: UITapGestureRecognizer) {

    print("Tap happend")
}

@objc func longGestureActionHandler(_ gesture: UILongPressGestureRecognizer) {

    print("Long press")
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...