2014-11-12 7 views
3

Расширения клавиатуры в iOS являются подклассами класса UIInputViewController и имеют свойство textDocumentProxy для взаимодействия с базовым документом. Объект textDocumentProxy раскрывает некоторые важные черты документа, такие как тип автокапитализации. Вопрос в том, как известно расширение клавиатуры при изменении базового документа?Как расширение клавиатуры знает, что прокси-сервер документа изменился?

Например, когда я использую новое сообщение в приложении «Сообщения», поле «Кому» использует разные входные признаки, чем поле ввода тела сообщения. Но поскольку клавиатура не исчезает при переключении фокуса с одного поля на другое, объект прокси-объекта текстового документа изменяется «на лету». Может ли расширение клавиатуры заметить такое изменение?

Я пробовал смотреть как объекты textDocumentProxy, так и [[self textDocumentProxy] autocapitalizationType] через KVO, но это не работает. Проверка свойства autocapitalizationType с использованием таймера показывает изменение, но, очевидно, я бы хотел избежать опроса.

ответ

4

Мой UIInputViewController поддерживает протокол UITextInput, который имеет метод textDidChange. От textDidChange я сравниваю self.textDocumentProxy с собственными self.currentTextProxy. Когда эти два отличаются, я обновляю self.currentTextProxy, а затем обновляю свой графический интерфейс на основе self.textDocumentProxy's UITextInputTraits.

+0

Спасибо! Я полностью пропустил 'UITextInputDelegate'. – zoul

+0

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