Автоматическая капитализация расширения пользовательской клавиатуры iOS
Я разработал пользовательское расширение клавиатуры, и я могу правильно ввести текст. Однако я не могу понять, когда включить капитализированную клавиатуру и нижний регистр. Это происходит главным образом потому, что следующие функции неправильно возвращают уже введенный текст до/после. Иногда они возвращают нуль, иногда только последние несколько символов и т.д. Много раз эти методы даже не вызываются вообще.
- (void)textWillChange:(id<UITextInput>)textInput
- (void)textDidChange:(id<UITextInput>)textInput
Я выяснил следующие сценарии, когда мне нужно включить мою прописную клавиатуру:
- Длина текста = 0 или ноль
- Когда вводится период, мне нужно добавить пробел и прописную клавиатуру
- Когда курсор помещается в место, где символ перед курсором является периодом или пробелом, а до этого является периодом.
- Когда пользователь выбрал весь текст "Выбрать все"
- Когда пользователь выбрал весь текст и удалил все
- Когда пользовательские обратные пространства и новый символ перед курсором являются периодом или пробелом и до этого периода.
- Когда пользователь вставляет текст, а символ перед курсором - это период или пробел, а до этого - период.
Также, если это возможно, возможно ли получить последнее введенное "цельное" слово, которое я могу использовать для поиска в словаре, например, для интеллектуального ввода?
Я прочитал документ Apple, в котором говорится, что пользователи ожидают автоматическую капитализацию, поэтому я уверен, что это должно быть возможно
https://developer.apple.com/library/ios/documentation/General/Conceptual/ExtensibilityPG/Keyboard.html
Ответы
Ответ 1
например. textField называется вашим экземпляром UITextField. Поместите это после инициализации.
textField.autocaptializationType = UITextAutocapitalizationTypeSentences
Это должно дать вам заглавные буквы во всех упомянутых вами случаях.
Хорошо, чтобы ваша пользовательская клавиатура применяла протокол UITextInputTraits, выполните следующие действия.
@interface MyCustomKeyboard : UITextInput <UITextInputTraits> //Now adopts the UITextInputTraits protocol.
- (instancetype)init {
self = super.init;
if(self) {
//Here you can set the properties that come with the protocol
self.autocapitilizationType = UIAutocapitalizationTypeSentences;
}
}