#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")
}