Ios 我如何处理表情符号被分解成的角色?
在iOS键盘扩展中,我有一个向后移动光标的功能,如下所示:Ios 我如何处理表情符号被分解成的角色?,ios,swift,unicode,ios-keyboard-extension,Ios,Swift,Unicode,Ios Keyboard Extension,在iOS键盘扩展中,我有一个向后移动光标的功能,如下所示: (textDocumentProxy).adjustTextPositionByCharacterOffset(-1) 并使用Apple提供的textDocumentProxy.documentContextBeforeInput功能在UILabel中显示光标前的单词。问题是,每当表情符号出现在标签内时,它就开始被分开: 有没有办法避免这种情况?这和我硬编码-1有关吗?我尝试过使用str.utf16.count,但由于某些原因,它根
(textDocumentProxy).adjustTextPositionByCharacterOffset(-1)
并使用Apple提供的textDocumentProxy.documentContextBeforeInput
功能在UILabel中显示光标前的单词。问题是,每当表情符号出现在标签内时,它就开始被分开:
有没有办法避免这种情况?这和我硬编码-1有关吗?我尝试过使用str.utf16.count
,但由于某些原因,它根本无法滚动。任何帮助都将不胜感激
几个月前我的问题一直没有得到回答,似乎每个偏移量都会将光标移动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)
}
func moveCursorBy(偏移量:Int,onProxy代理:UITextDocumentProxy){
var realpoffset=0
如果偏移量<0,则让text=proxy.documentContextBeforeInput{
对于文本中的uni.unicodeScalars.reverse().前缀(abs(偏移量)){
realpoffset-=uni.value>0xFFFF?2:1
}
}
否则,如果偏移量>0,则让text=proxy.documentContextAfterInput{
用于文本中的uni。unicodeScalars。前缀(abs(偏移量)){
realpoffset+=uni.value>0xFFFF?2:1
}
}
否则{
realpoffset=偏移量
}
proxy.adjustTextPositionByCharacterOffset(realOffset)
}
如果老问题一直没有得到回答,那么开始悬赏是否值得?此外,我还建议您在堆栈上阅读关于字符串中的字符的这一优秀答案:。作者使用西里尔字母作为多字节字符串的示例,这与表情符号的使用类似。嘿,这似乎对某些表情符号很好,但并非所有表情符号都有效!i、 e.它对你有用