Не удается добавить UITapGestureRecognizer и UILongPressGestureRecognizer в UIButton

#ios #swift #iphone #uibutton

#iOS #swift #iPhone #uibutton

Вопрос:

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

 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

Ответ №1:

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

 @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(_:)))
  

Ответ №2:

Если вы добавите gesture on imageView , вам придется включить isUserInteractionEnabled .

 imageView.isUserInteractionEnabled = true
  

И если вы добавите gesture on 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")
}