SwiftUI @FocusState doesn’t focus a desired TextField
04:19 20 Nov 2025

I have a SwiftUI view with multiple TextFields and a @FocusState bound to my view model. I want the first field to automatically get focus whenever the view appears. Here’s a minimal example:

import SwiftUI

struct MyView: View {
    @StateObject private var viewModel: MyViewModel
    @FocusState private var activeField: MyViewModel.Field?
    
    init(viewModel: MyViewModel) {
        self._viewModel = StateObject(wrappedValue: viewModel)
    }
    
    var body: some View {
        VStack(spacing: 20) {
            TextField("Field 1", text: $viewModel.field1)
                .focused($activeField, equals: .field1)
                .textFieldStyle(.roundedBorder)
            
            TextField("Field 2", text: $viewModel.field2)
                .focused($activeField, equals: .field2)
                .textFieldStyle(.roundedBorder)
            
            TextField("Field 3", text: $viewModel.field3)
                .focused($activeField, equals: .field3)
                .textFieldStyle(.roundedBorder)
        }
        .padding()
        .onAppear {
            // Attempt to focus the first field
            viewModel.focusedField = .field1
            activeField = viewModel.focusedField
            
        }
        .onChange(of: activeField) { _, newValue in
            viewModel.focusedField = newValue
        }
        .onChange(of: viewModel.focusedField) { _, newValue in
            activeField = newValue
        }
    }
}

What am I doing wrong?

ios swift swiftui