11

カーソル位置を設定しようとしている UISearchBar があります。UISearchBar の直接的なものが見つからなかったため、UITectField デリゲートを使用しています。以下は私が使用しているコードです:

  UITextField *textField = [searchBar valueForKey: @"_searchField"];
  // Get current selected range , this example assumes is an insertion point or empty selection
  UITextRange *selectedRange = [textField selectedTextRange];
  // Construct a new range using the object that adopts the UITextInput, our textfield
  UITextRange *newRange = [textField textRangeFromPosition:selectedRange.start toPosition:selectedRange.end];

質問は「toPosition」の「newRange」オブジェクトにあります。selectedRange.end-1; のようなものが必要です。カーソルを最後から2番目の位置にしたいので。

カーソルを最後から 2 番目の位置に設定するにはどうすればよいですか?

4

2 に答える 2

29

スイフト5

(タイトルに基づいて)に変換UITextPositionする方法を考えていたので、もともとこの質問に出くわしました。Intそれが私がここで答えるものです。

Int次のように、現在のテキスト位置の を取得できます。

if let selectedRange = textField.selectedTextRange {
    // cursorPosition is an Int
    let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
}

: 上記で使用されているプロパティと関数は、UITextInputプロトコルを実装する型で使用できるため、textViewがオブジェクトの場合、 のインスタンスをwithUITextViewに置き換えることができ、同様に機能します。textFieldtextView

カーソル位置の設定とその他の関連タスクについては、より完全な回答を参照してください。

于 2016-01-21T12:15:05.883 に答える
10

手がかりは、位置を作成し、次に長さのない範囲を作成してから選択することです

例えば

- (IBAction)select:(id)sender {
    //get position: go from end 1 to the left
    UITextPosition *pos = [_textField positionFromPosition:_textField.endOfDocument
                                               inDirection:UITextLayoutDirectionLeft
                                                    offset:1];

    //make a 0 length range at position
    UITextRange *newRange = [_textField textRangeFromPosition:pos
                                                toPosition:pos];

    //select it to move cursor
    _textField.selectedTextRange = newRange;
}
于 2013-10-14T21:30:18.763 に答える