我使用(BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)
对输入UITextView
的每个字符进行实时正则表达式验证。
这很有效,甚至可以处理可能包含无效字符的粘贴文本。
但Siri似乎并不关心这些事情,并将其口述直接转入(void)textViewDidChange:(UITextView *)theTextView
,绕过shouldChangeTextInRange
代表并避免验证检查。
这对我来说似乎是一个安全漏洞,并打破了每个其他输入通道所遵循的API流程。
有关如何让Siri Dictation遵守拨打shouldChangeTextInRange
的任何想法?
答案 0 :(得分:0)
我认为这就是答案....如果:
- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text
被调用然后它是用户输入。所以在那里放一个BOOL来记住是否检查了'shouldChange'。
然后,麦克风输入将调用:
-(void)textViewDidChange:(UITextView *)textView
在这里检查你的BOOL,如果没有,那么它就是麦克风输入。
(在textViewDidChange结尾处使BOOL = NO:)
这对我很有用。