IPhoneアプリには編集可能なUITextViewがあります。ユーザーがいくつかのツールバーボタンを押したときにカーソル位置にテキストを挿入する必要がありますが、カーソルの現在の位置を見つけるための文書化された(または文書化されていない)方法が見つからないようです。
誰かが何かアイデアを持っているか、他の誰かが同様のことを達成しましたか?
Drewhが言ったように、UITextViewのselectedRangeを使用して挿入ポイントを返すことができます。この範囲の長さは常にゼロです。以下の例は、その方法を示しています。
NSString *contentsToAdd = @"some string";
NSRange cursorPosition = [tf selectedRange];
NSMutableString *tfContent = [[NSMutableString alloc] initWithString:[tf text]];
[tfContent insertString:contentsToAdd atIndex:cursorPosition.location];
[theTextField setText:tfContent];
[tfContent release];
使用する UITextView selectedRange
プロパティは、テキストビューがファーストレスポンダーであるときに挿入ポイントを検索します。それ以外の場合、ビューにフォーカスがない場合、このプロパティはNSNotFound
を返します。その場合のカーソル位置を知る必要がある場合は、UITextView
をサブクラス化し、canResignFirstResponder
メソッドをオーバーライドすることを検討してください。このメソッドではカーソル位置をメンバー変数に格納できます。
やってみました UITextView.selectedRange
? NSRange
を返します。そのlocation要素は、カーソルの場所を教えてくれます。
Swift 4:
// lets be safe, thus if-let
if let cursorPosition = textView.selectedTextRange?.start {
// cursorPosition is a UITextPosition object describing position in the text
// if you want to know its position in textView in points:
let caretPositionRect = textView.caretRect(for: cursorPosition)
}
textView.selectedTextRange
を使用して選択したテキスト範囲を取得し、カーソル位置はそのstart
位置にあります。