2017-02-22 4 views
1

У меня есть UITextField с включенной кнопкой очистки. У меня также есть некоторый код, который отклоняет клавиатуру, когда пользователь вводит в другое место на экране:Перехват указателя жестящего знака с помощью кнопки «Очистить»

let tap: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(dismissKeyboard)) 
tap.cancelsTouchesInView = false 
view.addGestureRecognizer(tap) 

func dismissKeyboard() { 
    view.endEditing(true) 
} 

Проблема заключается в том, что этот коде мешает кнопки ясных, поэтому текстовое поле никогда не очищаются. Как я могу предотвратить распознавание указателя жесткости при нажатии кнопки очистки кнопки?

+0

Я бы подумал, что жесты будут следовать * до * зрения иерархии, но может и нет. Вы * можете * определить, был ли нажат слой кнопки (возможно, даже представление, но это может быть проблемой здесь. Как только вы знаете, что было использовано, вы можете правильно управлять потоком процесса. – dfd

+0

Хорошо, если пользователь называет это, что должно произойти? Если кнопка имеет приоритет или жест или оба? Если кто-то не стреляет, вызовите IBAction вручную и отправьте кнопку в качестве отправителя. – GregP

+0

. Кнопка должна иметь приоритет. И у меня также есть еще один обычный UIButton на экране, который должен быть приоритетным, но он всегда распознаватель жестов. – user2397282

ответ

2

Выяснил способ предотвратить это.

Таким образом, кнопка очистки имеет тип UIButton, поэтому мы не хотим, чтобы распознаватель жестов распознавал эти краны.

Эта функция вызывается, когда жест распознаватель получает кран:

func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldReceive touch: UITouch) -> Bool { 
    // Don't handle button taps 
    return !(touch.view is UIButton) 
} 

Линия:

return !(touch.view is UIButton) 

Вернется ложь, если место пользователь похлопал был UIButton и правда иначе.

Таким образом, false = кран не будет обрабатываться распознавателем жестов, а true = tap будет обработан.

Не забудьте добавить UIGestureRecognizerDelegate и установить его с помощью следующей строки:

tap.delegate = self 
Смежные вопросы