Наблюдайте текст в подклассе UITextView - PullRequest
1 голос
/ 08 апреля 2019

Я хочу наблюдать за текстом var!свойство UITextView, я не хочу использовать делегат.

Мое решение таково:

class MessageTextView: UITextView {

override var text: String! {
        didSet {
            print(text)
        }
    }
}

Но оно не вызывается при наборе текста в текстовом поле UITextView.Я попробовал textStorage и выделенный диапазон.Для меня имеет смысл только переопределить текст, но это не работает.Любое решение?

Редактировать: Это мое решение:

deinit {

        NotificationCenter.default.removeObserver(self, name: UITextView.textDidChangeNotification, object: nil)
    }

    func setObserverNotification() {
        NotificationCenter.default.addObserver(self, selector: #selector(updateText), name: UITextView.textDidChangeNotification, object: nil)
    }

    @objc private func updateText() {
      // Do updates here
    } 

1 Ответ

2 голосов
/ 08 апреля 2019

Для меня имеет смысл только переопределить текст, но это не работает.

Кажется маловероятным, что UITextView фактически устанавливает какие-либо свойства, которые вы пытались переопределить каждый разВы вводите символ.Фактическое содержимое текстового представления хранится в объекте UITextStorage, и он создается один раз и при необходимости изменяется, поэтому переопределение установщика textStorage будет вызываться в лучшем случае один раз, а не каждый раз при вводе.Сеттер text вообще не будет вызываться из-за изменений - вы можете вызвать его, чтобы получить или установить содержимое, но изменения не изменят весь контент.

Если вы хотите узнатькогда текстовое представление уведомлено, но не хочет использовать делегата, вы можете вместо этого прослушивать уведомления.UITextViewTextDidChangeNotification отправляется всякий раз, когда в текст вносятся изменения.

...