Objective c Siri听写绕过UITextView:shouldChangeTextInRange委托

Objective c Siri听写绕过UITextView:shouldChangeTextInRange委托,objective-c,uitextview,siri,dictation,Objective C,Uitextview,Siri,Dictation,我使用(BOOL)textView:(UITextView*)textView应该更改textinrange:(nsrrange)range replacementText:(NSString*)对输入到UITextView的每个字符执行实时正则表达式验证 这很有效,甚至可以处理可能包含无效字符的粘贴文本 但Siri似乎并不关心这些事情,而是将听写直接转储到(void)textview didchange:(UITextView*)textview,绕过shouldChangeTextInRan

我使用
(BOOL)textView:(UITextView*)textView应该更改textinrange:(nsrrange)range replacementText:(NSString*)
对输入到
UITextView的每个字符执行实时正则表达式验证

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

但Siri似乎并不关心这些事情,而是将听写直接转储到
(void)textview didchange:(UITextView*)textview
,绕过
shouldChangeTextInRange
委托,避免验证检查

在我看来,这似乎是一个安全缺陷,破坏了其他输入通道遵循的API流


关于如何让Siri听写符合呼叫
应更改范围
中的文本?

我想这就是答案……如果:

 - (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
调用,然后它是用户输入。因此,在那里放一个BOOL,以记住是否检查了“应该更改”

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

-(void)textViewDidChange:(UITextView *)textView
在这里检查你的声音,如果不是,那就是麦克风输入

(在textViewDidChange:“文本视图”的末尾设置BOOL=NO)


这对我来说太好了。

不知道,但听起来像。我同意。听起来你应该向苹果公司报告雷达漏洞。让我们看看会发生什么。我明白了为什么您希望触发
textView:shouldChangeTextInRange:
,但是,作为当前的解决方案,您可以查看
uiteOutput
协议,它有几个与听写相关的委托。希望看到有关此问题的一些更新。比如如何使用UIT,以及一个到雷达的链接,这样我们就可以跟踪进度并进行投票(如果苹果有这个概念的话)。现在,我捕获textViewDidChange,如果文本太长(字段末尾的文本,因为我无法知道在该点添加了什么/在哪里)。不理想。难以理解,措词拙劣,最重要的是,不起作用。我也投了反对票。顺便说一下,如果你不想深入研究学生的听写问题,这就是解决办法