所以我注意到我的应用程序中存在一些错误,因为我正在尝试使用UITextView的shouldChangeTextInRange
委托来允许简单的内容,如内联提及。但是,我注意到任何键盘都是多级键盘(例如日语的Romaji键盘),代理在执行字符替换时不会被调用。我有这个简单的设置来演示:
func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {
print("length: \(range.length) start: \(range.location)")
print(text)
return true;
}
使用罗马字键盘输入'ka',文本框显示'か',但代表的打印显示:
长度:0开始:0 k
长度:0开始:1个
因此textview已经替换了字符而没有调用委托。这对我来说似乎是一个破碎的功能,因为它完全打破了我提到的功能。有没有人遇到过这个?这种键盘最明显,但任何多级键盘都表现出相同的行为。我可以使用didChange委托,但它提供的信息要少得多,并且使得该功能难以编程。
我在这里遗漏了什么,是否有任何技巧可以在委托中实际捕捉这些编辑?