2017-11-10 5 views
0

私の関数はtextviewでカーソルの現在位置を取得したいのですが、textviewの文字列 ""(カーソルが最後の位置)を持っていて、 6など)と現在のインデックス、位置が3であると予想、どのような方法がios textView.selectedTextRange Emojisを含むテキストビューの範囲が間違っています

func getcurserforTextView(textView : UITextView) -> Int { 

    var cursorPosition = 0 

    if let selectedRange = textView.selectedTextRange { 

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

答えて

0

selectedRangeoffset(from:to:)値はテキストビュー内のテキストのUTF-16文字に基づいているカーソル位置を取得する場合は私に知らせてください。したがって、その文字列の6の結果は、UTF-16文字エンコーディングを使用しているときにその文字列に6文字が含まれているため正しいです。

取得したカーソル位置で何をしているかに応じて、そのUTF-16オフセットを「通常の」Stringインデックスに変換する必要があります。

Converting scanLocation from utf16 units to character index in NSScanner (Swift)には、同様の状況と変換の方法が記載されています。

+0

回答ありがとうございますが、私はUTF16文字を含むtextviewにカーソル位置が必要です。現在の答えは合計文字のみを入力してください – user3395433

+0

あなたは私の答えを読んで、私が提供したリンクを見ませんでした。 – rmaddy

+0

あなたの答えは文字列とNSStringの点では正しいですが、私は、求職者インデックスを取得する関数が欲しいです。説明ありがとう – user3395433

関連する問題