UIGestureRecognizer UITextView предотвращает появление клавиатуры при нажатии

2 ответа

Вы можете использовать UIGestureRecognizerDelegate, чтобы заставить UITapGestureRecognizer работать в соответствии с обычным UITextView поведением:

class TestViewController: UIViewController {

    @IBOutlet weak var textView: UITextView!

    override func viewDidLoad() {
        super.viewDidLoad()

        let tapGestureRecognizer = UITapGestureRecognizer(target: self, action: #selector(tap))
        tapGestureRecognizer.delegate = self

        textView.addGestureRecognizer(tapGestureRecognizer)
    }

    @objc private func tap() {
        print("tap")
    }

}

extension TestViewController: UIGestureRecognizerDelegate {

    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldRecognizeSimultaneouslyWith otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        return true
    }

}
0
ответ дан André Slotta 19 January 2019 в 16:49
поделиться

UITextView, вероятно, имеет свой собственный распознаватель жестов для обработки, когда пользователь нажимает на него. Когда это происходит, это делает текстовое представление первым респондентом, который заставляет клавиатуру появляться. Распознаватели жестов могут заставить другие распознаватели жестов потерпеть неудачу, когда они распознают свой жест. (См. документы ). Возможно, именно это и происходит, когда вы добавляете жест касания. Он распознает касание и таким образом заставляет другие жесты терпеть неудачу, что препятствует тому, чтобы текстовое представление стало первым респондентом.

Лучшее решение - следовать ответу на этот вопрос (как было упомянуто @FrancescoDeliro в комментариях) и использовать вызовы делегатов, чтобы знать, когда редактирование начинается / заканчивается.

0
ответ дан dunkmann00 19 January 2019 в 16:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: