2016-06-13 10 views
2

文字インデックスをレイアウトマネージャから文字列スケールに素早く変換する方法はありますか? これは私が使用しているコードです:素早くレイアウトマネージャからの文字インデックスを文字列スケールに変換する方法

let touchPoint: CGPoint = gesture.locationOfTouch(0, inView: self.definitionLabel) 
let index = layoutManager.characterIndexForPoint(touchPoint, inTextContainer: textContainer, fractionOfDistanceBetweenInsertionPoints: nil) 

をのlayoutManagerの規模でò数2が、迅速な文字列数などの文字以降の文字列のキャラクタの最初のインデックスにadvanceBy()機能を使用するように私に教えないでくださいテーマは一度。インデックスはNSLayoutManagerから返さ

答えて

2

「はベースNSString」、 であり、すなわち、それは、所定のポイントの文字までの文字列 開始からUTF-16コード単位の数です。 (だから、òが実際に 一つとして数えますが、絵文字数2とフラグさえ4を数える。)

を有効スウィフトStringインデックスにそのインデックスを変換するには、あなたがhttps://stackoverflow.com/a/30404532/1187415のよう 同じアプローチを使用することができます。

let text = ... // the stored text 
let i16 = text.utf16.startIndex.advancedBy(index, limit: text.utf16.endIndex) 
// i16 is a String.UTF16View.Index 
if let strIndex = String.Index(i16, within: text) { 
    // strIndex is a String.CharacterView.Index 
    let char = text[strIndex] 
    print(char) 
} 
関連する問題