どうも、ちょげ(@chogetarou)です。
TextFieldがフォーカスされた際に、入力されている文字を全て選択されている状態にする方法を紹介します。
方法
TextFieldのフォーカス時に文字を全て選択するには、onReceiveを使います。
まず、Combineをインポートします。
import Combine
次に、TextFieldにonReceiveを付与します。
そして、onReceiveがフォーカスを検知するようにします。
TextField("Your Text Here", text: $text)
//フォーカスを検知するonReceive
.onReceive(NotificationCenter.default.publisher(for: UITextField.textDidBeginEditingNotification)){ obj in
}
}
最後に、publisherのクロージャーに、TextFieldのテキストを全て選択する処理を追加します。
TextField("Your Text Here", text: $text)
.onReceive(NotificationCenter.default.publisher(for: UITextField.textDidBeginEditingNotification)){ obj in
//テキストを全て選択する処理
if let textField = obj.object as? UITextField {
textField.selectedTextRange = textField.textRange(
from: textField.beginningOfDocument,
to: textField.endOfDocument
)
}
}
これでTextFieldのフォーカス時に文字を全て選択状態にすることができます。
使用例
以下は、使用例です。
import SwiftUI
import Combine
struct ContentView: View {
@FocusState var selectState: Bool
@State var text = ""
var body: some View {
VStack {
TextField("Your Text Here", text: $text)
.onReceive(NotificationCenter.default.publisher(for: UITextField.textDidBeginEditingNotification)){ obj in
if let textField = obj.object as? UITextField {
textField.selectedTextRange = textField.textRange(
from: textField.beginningOfDocument,
to: textField.endOfDocument
)
}
}
.padding()
}
}
}
コメント