Основная проблема, в данном случае, заключается в том, что оба жеста будут добавлены ТОЛЬКО для кнопки largeOption
! Для пояснения, жест добавляется только для одного компонента, который в вашем случае должен добавляться только для самого последнего (то есть largeOption
):
smallOption.addGestureRecognizer(tapGesture) <-- skipped
mediumOption.addGestureRecognizer(tapGesture) <-- skipped
largeOption.addGestureRecognizer(tapGesture) <-- added
smallOption.addGestureRecognizer(longGesture) <-- skipped
mediumOption.addGestureRecognizer(longGesture) <-- skipped
largeOption.addGestureRecognizer(longGesture) <-- added
Логически говоря, это может быть ответ на свой вопрос:
Можно ли узнать, какая кнопка была нажата в функции tap и long, или мне нужно будет сделать две функции для каждой кнопки?
вам нужно добавить два жеста для каждой кнопки, потому что конкретный жест можно добавить только к одному представлению.
Однако вам не нужно объявлять новые методы действий в дополнение к @objc func tap(_ sender: UIGestureRecognizer)
и @objc func long(_ sender: UIGestureRecognizer)
существующие. Вместо этого вы можете проверить вид sender
. Пример:
Предположим, что мы вручную добавили жесты буксировки для каждой кнопки:
// gestures:
let smallOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let smallOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
smallOptionLongGesture.minimumPressDuration = 0.5
let mediumOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let mediumOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
mediumOptionLongGesture.minimumPressDuration = 0.5
let largeOptionTapGesture = UITapGestureRecognizer(target: self, action: #selector(tap))
let largeOptionLongGesture = UILongPressGestureRecognizer(target: self, action: #selector(long))
largeOptionLongGesture.minimumPressDuration = 0.5
// adding them:
smallOption.addGestureRecognizer(smallOptionTapGesture)
mediumOption.addGestureRecognizer(mediumOptionTapGesture)
largeOption.addGestureRecognizer(largeOptionTapGesture)
smallOption.addGestureRecognizer(smallOptionLongGesture)
mediumOption.addGestureRecognizer(mediumOptionLongGesture)
largeOption.addGestureRecognizer(largeOptionLongGesture)
Поэтому вы можете сделать следующее:
@objc func tap(_ sender: UIGestureRecognizer) {
// an example of how you could check the button
if sender.view == smallOption {
print("small short-press")
} else if sender.view == mediumOption {
print("medium short-press")
} else if sender.view == largeOption {
print("large short-press")
}
}
@objc func long(_ sender: UIGestureRecognizer) {
// you could apply the same above approach here
}
Другой вариант: создать методы действий для каждой кнопки отдельно.