ios textView.selectedTextRange为包含Emojis的textview提供了错误的范围

时间:2017-11-10 04:07:27

标签: ios swift nsstring uitextview

我的函数想要在textview中获取光标当前位置,但是当我有字符串" "在textview中光标位于最后位置,它返回范围(0,6),当前索引为6,预期位置为3,如果有任何方法可以获取光标位置,请告诉我

func getcurserforTextView(textView : UITextView ) -> Int {

    var cursorPosition = 0

    if let selectedRange = textView.selectedTextRange {

        cursorPosition  = textView.offset(from: textView.beginningOfDocument, to: selectedRange.start)
    }
    return cursorPosition
}

1 个答案:

答案 0 :(得分:1)

selectedRangeoffset(from:to:)值基于文本视图中文本的UTF-16字符。因此该字符串的结果为6是正确的,因为该字符串在使用UTF-16字符编码时包含6个字符。

因此,根据您对获取的光标位置所做的操作,您可能需要将该UTF-16偏移转换为“普通”String索引。

请参阅Converting scanLocation from utf16 units to character index in NSScanner (Swift),其中包含类似情况和执行转换的方法。