How to detect live changes on TextField in SwiftUI?

后端 未结 5 1760
我在风中等你
我在风中等你 2020-12-05 06:39

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

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

I want to call a

5条回答
  •  感动是毒
    2020-12-05 07:29

    SwiftUI 2.0

    From iOS 14, macOS 11, or any other OS contains SwiftUI 2.0, there is a new modifier called .onChange that detects any change of the given state:

    struct ContentView: View {
        @State var location: String = ""
    
        var body: some View {
            TextField("Your Location", text: $location)
                .onChange(of: location) {
                    print($0) // You can do anything due to the change here.
                    // self.autocomplete($0) // like this
                }
        }
    }
    

    SwiftUI 1.0

    For older iOS and other SwiftUI 1.0 platforms, you can use onReceive:

    .onReceive(location.publisher) { 
        print($0)
    }
    

    Note that it returns the change instead of the entire value. If you need the behavior the same as the onChange, you can use the combine and follow the answer provided by @pawello2222.

提交回复
热议问题