Post

Replies

Boosts

Views

Activity

Reply to In SwiftUI, any way to intercept each character entered in a TextField?
There are a number of interesting responses here and great ideas. Encountering a situation where I needed to enforce input using a SwiftUI TextField the same way I had done with the textField(_:shouldChangeCharactersIn:replacementString:) delegate method, I found simple filtering works nicely. @State var textInput: String = "" ... TextField("numerical entries only", text: $textInput) .onChange(of: textInput) { newValue in let numberCharacterSet = "0123456789" textInput = newValue.filter { numberCharacterSet.contains($0) } }
Aug ’23
Reply to In SwiftUI, any way to intercept each character entered in a TextField?
Checking for delete entry. With the UIKit shouldChangeCharactersIn... delegate method the backspace is the equivalent of an empty string. In the SwiftUI TextField .onChange() block it is necessary to use a capture list for the @State property being updated and do a comparison between that and the new value in the closure. @State var textInput: String = "" var body: some View { TextField("numerical entries only", text: $textInput) .onChange(of: textInput) { [textInput] newValue in if newValue.count < textInput.count { print("- backspace detected") } } ...
Aug ’23