Автоматическая капитализация расширения пользовательской клавиатуры 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;

      }
}