[SwiftUI]TextFieldのフォーカスを移動するには?

SwiftUI

どうも、ちょげ(@chogetarou)です。

TextFieldのフォーカスを移動する方法を紹介します。

スポンサーリンク

方法

インターフェース, インターネット, プログラム, ブラウザ, Www

TextFieldのフォーカスを移動するには、FocusStateとfocusedモディファイアを使います。

まず、FocusStateの変数を用意します。

@FocusState private var focusState

次に、TextFieldにfocusedモディファイアを付与します。

そして、focusedモディファイアの第1引数に用意した変数のバインド、第2引数「equals」にフォーカスを当てる際の値を指定します。

ここまでで、FocusStateの変数の値がfocusedの引数「equals」の値と一緒になった際に、TextFieldにフォーカスが移動するようになります。

TextField("", text: $editingText)
    //focusStateの値がvalueになったときにフォーカスされる
    .focused($focusState, equals: value) 

最後に、Buttonなどの処理で、FocusStateの変数を操作します。

Button("") {
    //FocusStateの変数の値の操作
}

使用例

以下は、使用例です。

struct ContentView: View {
    enum FocusField {
        case name
        case age
        case emailAddress
    }
    
    @State var name = ""
    @State var age = ""
    @State var emailAddress = ""

    @FocusState private var focusState : FocusField?
    
    var body: some View {
        VStack (spacing: 30){
            VStack {
                TextField("Your name", text: $name)
                    .focused($focusState, equals: .name)
                    .padding()
                Button("Focus Name") {
                    focusState = .name
                }
            }
            VStack {
                TextField("Your age", text: $age)
                    .focused($focusState, equals: .age)
                    .padding()
                Button("Focus age") {
                    focusState = .age
                }
            }
            VStack {
                TextField("Your emailAddress", text: $emailAddress)
                    .focused($focusState, equals: .emailAddress)
                    .padding()
                Button("Focus emailAddress") {
                    focusState = .emailAddress
                }
            }
            
        }
    }
    
}

コメント

タイトルとURLをコピーしました