UITextView не прокручивается при вложении изображения - PullRequest
0 голосов
/ 03 октября 2019

У меня есть UITextView с attributedString и прикрепленным изображением. UITextView не редактируется , но выбирается .

Проблема связана с вложением изображения. Когда я начинаю прокручивать UITextView, и прикосновение (мой палец) начиналось с вложенного изображения. Это не прокручивается в большинстве случаев. Если я прокручиваю очень быстро, это сработает. Но если я держу палец на вложенном изображении даже с очень небольшой продолжительностью, он не будет прокручиваться.
Касание распознается как выделение на вложенном изображении (изображение будет выделено после того, как я уберу палец).

Iпопытался отключить свойство UITextView isSelectable, проблема исчезла. Но это не то, что я хочу. Я хочу, чтобы его можно было выбрать для обычного текста.

Я попытался отключить все UILongPressGestureRecognizer из UITextView, но безуспешно. Проблема по-прежнему существует.

Могу ли я найти решение, в котором я могу выбрать, чтобы избежать, и вложение изображения к этому времени съедает свиток? Заранее спасибо!

1 Ответ

0 голосов
/ 03 октября 2019

Я сделал это.

Полагаю, что в UITextView реализация выделения осуществляется через UILongPressGestureRecognizer, а прокрутка - через UIPanGestureRecognizer.
Итак, если я не допущу, чтобы жест длинного нажатия распознавался дожест панорамирования не срабатывает, при длительном нажатии прокрутка больше не сгорает.

Во-первых, у меня есть UITextView подкласс. В этом подклассе выполните цикл от UIGestureRecognizers до UITextView в соответствующей точке. Я сделал это по методу didMoveToSuperview().

override func didMoveToSuperview() {
    if let grs = gestureRecognizers {
        for gr in grs {
            if gr.isKind(of: UIPanGestureRecognizer.self) {
                // set delegate
                gr.delegate = self
            }
        }
    }
}

Во-вторых, реализуйте метод gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool из протокола UIGestureRecognizerDelegate.

extension CustomTextView: UIGestureRecognizerDelegate {    
    func gestureRecognizer(_ gestureRecognizer: UIGestureRecognizer, shouldBeRequiredToFailBy otherGestureRecognizer: UIGestureRecognizer) -> Bool {
        // all UILongPressGestureRecognizer has to wait UIPanGestureRecognizer to be failed before recognized
        if gestureRecognizer.isKind(of: UIPanGestureRecognizer.self) && otherGestureRecognizer.isKind(of: UILongPressGestureRecognizer.self) {
            return true
        }
        return false
    }
}

Ссылка от apple.com

...