Siri Dictation Bypasses UITextView:shouldChangeTextInRange Delegate

时间:2014-11-04 15:40:33

标签: objective-c uitextview siri dictation

我使用(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)对输入UITextView的每个字符进行实时正则表达式验证。

这很有效,甚至可以处理可能包含无效字符的粘贴文本。

但Siri似乎并不关心这些事情,并将其口述直接转入(void)textViewDidChange:(UITextView *)theTextView,绕过shouldChangeTextInRange代表并避免验证检查。

这对我来说似乎是一个安全漏洞,并打破了每个其他输入通道所遵循的API流程。

有关如何让Siri Dictation遵守拨打shouldChangeTextInRange的任何想法?

1 个答案:

答案 0 :(得分:0)

我认为这就是答案....如果:

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

被调用然后它是用户输入。所以在那里放一个BOOL来记住是否检查了'shouldChange'。

然后,麦克风输入将调用:

-(void)textViewDidChange:(UITextView *)textView

在这里检查你的BOOL,如果没有,那么它就是麦克风输入。

(在textViewDidChange结尾处使BOOL = NO:)

这对我很有用。