UITextView选中预测文本后自动添加空格的问题求助
iOS UITextView预测文本触发代理方法两次的问题
- 点击系统预测文本时,UITextView的代理方法
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool会被调用两次:第一次插入预测文本内容,第二次插入空格。 - 曾使用临时解决代码:
但该代码在用户选择单字符预测文本时完全失效。if text.count > 1 { return false } - 代理方法内包含自定义逻辑(如@提及功能),处理完成后会在主线程更新TextView的
attributedText,但预测文本场景下的空格调用会提前触发,此时自定义处理后的文本还未完成设置,最终仅插入空格,导致自定义逻辑失效。 - 尝试过两种解决思路,但均存在缺陷:
- 试图阻止代理方法在文本设置完成前被重复调用,未找到可行方案;
- 尝试忽略预测文本附带的空格,但直接判断
if text == " " { return false }会禁用用户手动输入空格的功能,不可行。
预测文本示例:
内容的提问来源于stack exchange,提问作者Umer Khan
相关产品推荐
相关产品推荐

