iOSでTextViewというと,UITextViewを使うのが一般的だ.
いろいろとイベントが用意されていて楽なのだが,カーソル位置を取得するのに結構迷ったので書き残しておく.
目的は,UITextViewのインスタンスが与えられたところから,カーソル位置をCGRectで取得することだ.
まずは,UITextView内のカーソル位置を,相対的にでもいいので取得する.
カーソル,キャレット,というより選択範囲が取得できる.
let textRange: UITextRange = textView.selectedTextRange
何も選択していなければカーソルの位置が帰ってくる.
ただし,型はUITextRangeだ.
次にこいつをCGRectに変換する.
let position: CGRect = textView.caretRectForPosition(textRange.start)
textRangeはその名の通り,範囲を示している.
それを,UITextPositionの値にしてやる.
今回は,範囲選択されてない前提だったので,startにした(範囲選択されてないのだからendでもいい).
で,そしてcaretRectForPosition
してやると,見事CGRectになる.
UITextRangeやUITextPositionまでは調べると簡単にわかったのだけれど,CGRectにするのはなかなか見つからなかった.