UITextField
私はカーソル位置の操作方法を実験してきました。Objective-Cの回答をいくつか見つけました。
しかし、私は Swift を使用しているため、現在のカーソルの位置を取得する方法と、それを Swift で設定する方法を学びたいと思いました。
以下の回答は、私の実験と Objective-C からの翻訳の結果です。
ベストアンサー1
以下の内容はUITextField
との両方に適用されますUITextView
。
有用な情報
テキスト フィールドのテキストの先頭:
let startPosition: UITextPosition = textField.beginningOfDocument
テキスト フィールドのテキストの最後の部分:
let endPosition: UITextPosition = textField.endOfDocument
現在選択されている範囲:
let selectedRange: UITextRange? = textField.selectedTextRange
カーソル位置を取得する
if let selectedRange = textField.selectedTextRange {
let cursorPosition = textField.offset(from: textField.beginningOfDocument, to: selectedRange.start)
print("\(cursorPosition)")
}
カーソル位置を設定する
位置を設定するために、これらのメソッドはすべて、実際には同じ開始値と終了値を持つ範囲を設定しています。
始まりへ
let newPosition = textField.beginningOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
最後まで
let newPosition = textField.endOfDocument
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
現在のカーソル位置の1つ左の位置へ
// only if there is a currently selected range
if let selectedRange = textField.selectedTextRange {
// and only if the new position is valid
if let newPosition = textField.position(from: selectedRange.start, offset: -1) {
// set the new position
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
}
任意の位置に
最初から始めて、5 文字右に移動します。
let arbitraryValue: Int = 5
if let newPosition = textField.position(from: textField.beginningOfDocument, offset: arbitraryValue) {
textField.selectedTextRange = textField.textRange(from: newPosition, to: newPosition)
}
関連している
すべてのテキストを選択
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
テキストの範囲を選択
// Range: 3 to 7
let startPosition = textField.position(from: textField.beginningOfDocument, offset: 3)
let endPosition = textField.position(from: textField.beginningOfDocument, offset: 7)
if startPosition != nil && endPosition != nil {
textField.selectedTextRange = textField.textRange(from: startPosition!, to: endPosition!)
}
現在のカーソル位置にテキストを挿入
textField.insertText("Hello")
ノート
textField.becomeFirstResponder()
テキスト フィールドにフォーカスを当て、キーボードを表示するために使用します。見るこの答えある範囲のテキストを取得する方法については、