在我的iOS键盘扩展程序中,我有一个向下移动光标的功能,如下所示:
(textDocumentProxy).adjustTextPositionByCharacterOffset(-1)
并使用Apple提供的textDocumentProxy.documentContextBeforeInput
功能在UILabel中显示光标前的单词。问题是,只要表情符号出现在标签内,它就会开始被分开:
有没有办法避免这种情况?这与我硬编码-1有什么关系吗?我尝试过使用str.utf16.count
,但由于某种原因,根本不会滚动。任何帮助将不胜感激。
Here's几个月前我的问题从未得到回答
答案 0 :(得分:1)
看起来每个偏移都会将光标移动16位,任何32位字符都会被切成两半。所以解决方案是每32位字符,我们将光标移动2而不是1。
func moveCursorBy(offset: Int, onProxy proxy: UITextDocumentProxy){
var realOffset = 0
if offset < 0, let text = proxy.documentContextBeforeInput {
for uni in text.unicodeScalars.reverse().prefix(abs(offset)){
realOffset -= uni.value > 0xFFFF ? 2 : 1
}
}
else if offset > 0, let text = proxy.documentContextAfterInput{
for uni in text.unicodeScalars.prefix(abs(offset)) {
realOffset += uni.value > 0xFFFF ? 2 : 1
}
}
else{
realOffset = offset
}
proxy.adjustTextPositionByCharacterOffset(realOffset)
}