2014-11-04 5 views
11

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

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

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

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

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

+3

Dunno, но это звучит как [хорошая ошибка в файле] (http://bugreport.apple.com). – rickster

+0

Согласен. Похоже, вы должны подать радар. – Tander

+0

Ошибка сообщается Apple. Давай посмотрим что происходит. –

ответ

0

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

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

называется, то это пользовательский ввод. Поэтому поставьте BOOL там, чтобы запомнить, была ли проверена опция «shouldChange».

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

-(void)textViewDidChange:(UITextView *)textView 

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

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

Это прекрасно работает для меня.

+1

почему голос? –

+0

Трудно понять, плохая формулировка и, самое главное, не сработало. Даун-проголосовали тоже. –

+0

Это решение, кстати, если вы не хотите копаться в диктатных делегатах UITextInput – Andy