web-dev-qa-db-ja.com

iPhoneのUITextViewでカーソル位置を取得しますか?

IPhoneアプリには編集可能なUITextViewがあります。ユーザーがいくつかのツールバーボタンを押したときにカーソル位置にテキストを挿入する必要がありますが、カーソルの現在の位置を見つけるための文書化された(または文書化されていない)方法が見つからないようです。

誰かが何かアイデアを持っているか、他の誰かが同様のことを達成しましたか?

27
user74686

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];
32
jpedroso

使用する UITextView selectedRangeプロパティは、テキストビューがファーストレスポンダーであるときに挿入ポイントを検索します。それ以外の場合、ビューにフォーカスがない場合、このプロパティはNSNotFoundを返します。その場合のカーソル位置を知る必要がある場合は、UITextViewをサブクラス化し、canResignFirstResponderメソッドをオーバーライドすることを検討してください。このメソッドではカーソル位置をメンバー変数に格納できます。

10

やってみました UITextView.selectedRangeNSRangeを返します。そのlocation要素は、カーソルの場所を教えてくれます。

8
drewh

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位置にあります。

6
Milan Nosáľ