Siri Dictation обходит UITextView: shouldChangeTextInRange Delegate

Я использую (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *) для выполнения проверки регулярного выражения в реальном времени для каждого ввода символа в UITextView.

Это хорошо работает и даже обрабатывает вложенный текст, который может содержать недопустимые символы.

Но Сири, похоже, не заботится о таких вещах и не сбрасывает свою диктовку прямо в (void)textViewDidChange:(UITextView *)theTextView, минуя делегат shouldChangeTextInRange и избегая проверок проверки.

Это кажется недостатком безопасности для меня и прерывает поток API, который следует за каждым другим входным каналом.

Любые мысли о том, как я могу заставить Siri Dictation выполнить вызов shouldChangeTextInRange?

Ответ 1

Я думаю, что это ответ.... если:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text

вызывается, а затем вводится пользователем. Поэтому поставьте BOOL там, чтобы помнить, был ли отмечен флажок "shouldChange".

тогда микрофонный вход вызовет:

-(void)textViewDidChange:(UITextView *)textView

проверьте свой BOOL здесь, и если это НЕТ, то это микрофонный вход.

(сделайте BOOL = NO в конце textViewDidChange:)

Это отлично работает для меня.