Search code examples
iostextfieldswiftui

How to detect live changes on TextField in SwiftUI?


I have a simple TextField that binds to the state 'location' like this,

TextField("Search Location", text: $location)

I want to call a function each time this field changes, something like this:

TextField("Search Location", text: $location) {
   self.autocomplete(location)
}

However this doesn't work. I know that there are callbacks, onEditingChanged - however this only seems to be triggered when the field is focussed.

How can I get this function to call each time the field is updated?


Solution

  • You can create a binding with a custom closure, like this:

    struct ContentView: View {
        @State var location: String = ""
    
        var body: some View {
            let binding = Binding<String>(get: {
                self.location
            }, set: {
                self.location = $0
                // do whatever you want here
            })
    
            return VStack {
                Text("Current location: \(location)")
                TextField("Search Location", text: binding)
            }
    
        }
    }