[解決済み] SwiftでUITextFieldとUITextViewのカーソル位置の取得と設定
2022-05-14 14:40:43
質問
私はこれまで
UITextField
とそのカーソル位置で動作する方法について実験しています。私は、以下のような多くの関連するObjective-Cの答えを見つけました。
しかし、私はSwiftで作業しているので、Swiftで現在のカーソル位置を取得し、またそれを設定する方法を学びたかったのです。
以下の回答は、私が実験し、Objective-Cから翻訳した結果です。
どのように解決するのですか?
以下の内容は
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()
を使って、テキストフィールドにフォーカスを与え、キーボードを表示させます。 -
参照 この回答 を参照してください。
参照
関連
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] 制約条件の変更をアニメーションで表現するには?
-
[解決済み] Xcode 12、iOS Simulator用にビルドしても、iOS用にビルドされたオブジェクトファイルでは、アーキテクチャ「arm64」用にリンクされます。
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] UITextFieldの最大文字数を設定します。
-
[解決済み] SwiftでURLから画像を読み込む/ダウンロードする
-
[解決済み] Swiftのプロトコルでオプションのメソッドを定義するには?
-
[解決済み】SwiftでUITextView内にプレースホルダーテキストを追加しますか?
-
[解決済み】UITextFieldとUITextViewのカーソル/キャレットの色を変更する。
-
[解決済み】Swiftで簡単なコレクションビューを作成する方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[エラー処理】iOSのエラー、アーキテクチャx86_64の未定義シンボルについて
-
[解決済み] iOSのステータスバーの文字色を変更する方法
-
[解決済み] iOSのバージョンを確認する方法を教えてください。
-
[解決済み] SwiftでStringを配列に分割する?
-
[解決済み] Objective-Cでデリゲートを作成するにはどうしたらいいですか?
-
[解決済み] NSの接頭辞はどういう意味ですか?
-
[解決済み] UITextFieldのテキスト変更イベント
-
[解決済み] 「GCC使用時に「Xcode/iOSのライセンスに同意するには管理者権限が必要です。rootでsudoを使用して再実行してください。
-
[解決済み] Swiftを使用してアプリのバージョンとビルド番号を取得するにはどうすればよいですか?
-
[解決済み] Swiftで範囲を作成する方法は?