Страницы

Поиск по вопросам

четверг, 11 июля 2019 г.

Одиночный тап, созданный через UITapGestureRecognizer, не срабатывает на UIButton

У меня есть кнопка, UI Button. У этой кнопки нет никакого экшена, я хочу этот экшен вызывать в обработке тапа. Я создал событие одиночного тапа через UITapGestureRecognizer. Когда я тапаю мимо кнопки, событие срабатывает. Когда тапаю по кнопке, я вижу анимация прожатия, но событие на срабатывает. Также я создал двойной тап, с ним всё отлично.
Вопрос №1 Что делать с одиночным тапом? Как заставить его проходить по кнопке?
Вопрос №2 Как мне в обработчике тапа получить кнопку, над которой был совершен тап? Если быть точнее, то мне нужно узнать текст на кнопке.
Вот выдержки из кода:
override func viewDidLoad() { ...
let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:") singleTap.numberOfTapsRequired = 1 singleTap.numberOfTouchesRequired = 1 view.addGestureRecognizer(singleTap)
let doubleTap = UITapGestureRecognizer(target: self, action: "doubleTap:") doubleTap.numberOfTapsRequired = 2 doubleTap.numberOfTouchesRequired = 1 view.addGestureRecognizer(doubleTap) singleTap.requireGestureRecognizerToFail(doubleTap)
... }
func doubleTap(sender: UIGestureRecognizer) { if sender.state == .Ended { print("doubleTap") } }
func singleTap(sender: UIGestureRecognizer) { if sender.state == .Ended { print("singleTap") } }
func addButton(time:String, x:CGFloat, y:CGFloat, width:CGFloat, height:CGFloat, tag: Int) -> UIButton { let button = UIButton(type: UIButtonType.System) as UIButton button.frame = CGRectMake(x, y, width, height) button.setTitle(time, forState: UIControlState.Normal) button.tag = tag self.scrollView.addSubview(button) return button }


Ответ

Мне помогли на основном сайте: https://stackoverflow.com/questions/34736552/single-tap-created-by-uitapgesturerecognizer-doesnt-work-on-uibutton/34736789#34736789
Нужно было вешать тапы не на вьху, а на кнопки.
let singleTap = UITapGestureRecognizer(target: self, action: "singleTap:") singleTap.numberOfTapsRequired = 1 singleTap.numberOfTouchesRequired = 1 button.addGestureRecognizer(singleTap)

Комментариев нет:

Отправить комментарий