[SwiftUI]次のTextFieldに移動するには?

SwiftUI

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

あるTextFieldから次のTextFieldに移動する方法を紹介します。

スポンサーリンク

方法

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

次のTextFieldに移動するには、FocusStaeとfocused修飾子を使います。

まず、TextFieldを判別するための列挙体を用意します。

enum FocusField {
    case name
    case email
    case password
}

次に、列挙体が型のFocusStateの変数を用意します。

@FocusState var focusField : FocusField?

そして、移動するTextFieldにfocused修飾子を付与します。

focused修飾子の第1引数にはFocusStateのバインド、引数「equals」には列挙体のTextFieldに対応する値を指定します。

TextField("Name", text: $name)
    .focused($focusField, equals: .name)

あとは、移動するする際に、 FocusStateの変数の値を移動先のTextFieldの値にします。

self.focusField = .name

FocusStateとfocused修飾子を使うことで、あるTextFieldから次のTextFieldに移動することが出来ます。

使用例

enum FocusField {
    case name
    case email
    case password
}

struct ContentView: View {
    
    @State var name = ""
    @State var email = ""
    @State var password = ""
    
    @FocusState var focusField : FocusField?
    
    var body: some View {
        VStack {
            TextField("Name", text: $name)
                .padding()
                .textFieldStyle(.roundedBorder)
                .focused($focusField, equals: .name)
                .onSubmit {
                    self.focusField = .email
                }
            
            TextField("email", text: $name)
                .padding()
                .textFieldStyle(.roundedBorder)
                .focused($focusField, equals: .email)
                .onSubmit {
                    self.focusField = .password
                }
            
            TextField("password", text: $name)
                .padding()
                .textFieldStyle(.roundedBorder)
                .focused($focusField, equals: .password)
        }
    }
}

コメント

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