Я занимаюсь разработкой пользовательских клавиатуры для прошивки, используя UIInputViewController я реализовал следующие методы: textWillChange, textDidChange.Как проверить, если пользователь изменил UITextInput:
Я хочу знать, когда пользователь меняет текущее текстовое поле и перемещается в другой, чтобы настроить параметры текущей текстовой поля в текущей текстовой области.
Теперь я пытался сделать что-то вроде этого:
override func textWillChange(textInput: UITextInput) {
if !textInput.isEqual(self.mCurrentTextInput) {
Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
KeyboardState.sharedInstance.setAutoCapitalizationFlag()
}
self.mCurrentTextInput = textInput
}
Или даже что-то вроде этого:
override func textWillChange(textInput: UITextInput) {
if self.mCurrentTextInput == nil {
if let view = textInput.textInputView {
self.mCurrentTextInput = view
KeyboardState.sharedInstance.setAutoCapitalizationFlag()
}
Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
} else if self.mCurrentTextInput!.isEqual(textInput) {
Logger.printLogToConsole(TAG, aMethodName: __FUNCTION__, aMessage: "TextInput has changed!")
if let view = textInput.textInputView {
KeyboardState.sharedInstance.setAutoCapitalizationFlag()
self.mCurrentTextInput = view
}
}
}
Но ни один из этих вариантов не работает для меня.
UPDATE: Как вы можете заметить объект я получаю в методах обратного вызова не является объектом UITextField, но объект UITextInput, который на самом деле является протокол, а не само текстовое поле. Поэтому я не могу добавить наблюдателя. Приложение для клавиатуры не управляет полями, в которые пользователь вводит текст.
Вопрос: У кого-то есть что-то подобное или есть идея, как я могу узнать, как пользователь меняет свое текущее текстовое поле.
Заранее спасибо.
Вообще , UIKit не соответствует KVO. http://stackoverflow.com/questions/6333600/does-key-value-observing-work-on-uitextviews-text-property – Anton
@Anton Спасибо за комментарий! Думаю, вам здесь не хватает этой концепции! Позвольте мне уточнить вас: «KVO не обязательно будет работать для ключей, которые уже существуют в этом классе UIKit», поэтому я использую здесь другой подход. Поэтому, прежде чем комментировать, пройдите подробное исследование. Кстати, KVO отлично работает во всех моих приложениях, которые в настоящее время находятся в магазине приложений и даже обновлены до iOS 8. – Vizllx
@Vizllx Я не говорю, что никто не должен использовать KVO. Соответствие KVO UIKit является случайным, и вы не должны полагаться на него, как сказал один из разработчиков UIKit (Дейв ДеЛонг). См. Его ответ здесь: http://stackoverflow.com/a/6738557/430633. По этой причине разработчики ReactiveCocoa добавили 'rac_textSignal' к компонентам UITextView и UITextField - только потому, что свойство« text »не является« строго »KVO-совместимым, KVO-ing может привести к появлению странных ошибок. – Anton