我怎样才能解决被分解为角色的表情符号?

时间:2016-04-26 01:45:45

标签: ios swift unicode ios-keyboard-extension

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

(textDocumentProxy).adjustTextPositionByCharacterOffset(-1)

并使用Apple提供的textDocumentProxy.documentContextBeforeInput功能在UILabel中显示光标前的单词。问题是,只要表情符号出现在标签内,它就会开始被分开: enter image description here

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

Here's几个月前我的问题从未得到回答

1 个答案:

答案 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)
}