Курсор и текст не синхронизированы при установке атрибутивного текста в делегате UITextView - PullRequest
0 голосов
/ 15 мая 2019

У меня есть UITextView, который получает данные от пользователя.Я хочу заменить входной текст атрибутивным текстом.В настоящее время я использую textView(_:shouldChangeTextIn:replacementText:), чтобы установить свойство attributedText текстового представления, а затем возвращаю false.Кажется, это работает нормально, за исключением того, что при добавлении или удалении начального символа курсор не синхронизирован с вводимой буквой.Иногда курсор выпрыгивает до появления текста, иногда текст удаляется до того, как курсор переместится назад.Есть ли способ синхронизировать их?

Это происходит не всегда, поэтому вам придется продолжать удалять и повторно вводить первый символ.Вы можете видеть это на симуляторе и 5 с, но на X это слишком быстро, чтобы увидеть.

Вот пример:

import UIKit

class ViewController: UIViewController, UITextViewDelegate {

    override func viewDidLoad() {
        super.viewDidLoad()

        let textView = UITextView()
        textView.delegate = self
        textView.frame = {
            var result = view.bounds
            let top: CGFloat = 50.0
            result.size.height -= top
            result.origin.y += top
            return result
        }()
        view.addSubview(textView)
    }

    func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text:     String) -> Bool {
        if text == "\n" {
            textView.resignFirstResponder()
            return false
        }
        let text = (textView.text as NSString).replacingCharacters(in: range, with: text)
        let attributes: [NSAttributedString.Key: Any] = [
            .font: UIFont.systemFont(ofSize: 17.0, weight: .bold)
        ]
        textView.attributedText = NSAttributedString(
            string: text,
            attributes: attributes)
        return false
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...