1

在我的 iOS 键盘扩展中,我有一个向后移动光标的功能,如下所示:

(textDocumentProxy).adjustTextPositionByCharacterOffset(-1)

textDocumentProxy.documentContextBeforeInput并使用Apple 提供的功能在 UILabel 中显示光标前的单词。问题是,每当表情符号出现在标签内时,它就会开始被分开: 在此处输入图像描述

有没有办法避免这种情况?这与我硬编码-1有什么关系吗?我试过使用str.utf16.count,但由于某种原因根本不滚动。任何帮助将不胜感激。

这是我几个月前的问题,但从未得到回答

4

1 回答 1

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)
}
于 2016-05-10T10:24:39.030 回答