swiftuiswiftui-texteditor

Default focus on TextEditor does not work


I want to make a textEditor have default focus when a view appears in SwiftUI. My approach works for a textField but not a textEditor. I'm not sure why this is.

struct ContentView: View {
    enum FocusedField {
        case firstName, lastName
    }

    @State private var firstName = ""
    @State private var lastName = ""
    @FocusState private var focusedField: FocusedField?

    var body: some View {
        
        TextEditor(text: $firstName)
            .focused($focusedField, equals: .firstName)
            .onAppear {
                focusedField = .firstName
             }
    }
}

Solution

  • There is the .defaultFocus modifier for that, eg

    TextEditor(text: $firstName)
        .focused($focusedField, equals: .firstName)
        .defaultFocus($focusedField, .firstName)              
    
    

    Unfortunately FocusState has been broken for years and even if you make it work on one platform it probably won't work on another. Seems it works slightly better on macOS but is completely broken on iOS.