按预期在键盘上打字会触发.onChange
,因此,除非用户删除了TextField
中的所有字符,否则控制台会正确地打印"更改".
struct CurrencyInput: View {
@State var value: Double = 0
var body: some View {
TextField("Amount", value: $value, format: .number)
.keyboardType(.decimalPad)
.onChange(of: value) {
print("changed")
print(value)
}
}
}
从空的TextField
开始,然后输入数字2,后跟一个退格符,我想应该是这样
预期的控制台日志(log)
changed
2
changed
0
不过,我只得到这个
实际控制台日志(log)
changed
2
将TextField
绑定更改为String
似乎可以解决问题,但是我不能使用格式化程序.
struct CurrencyInput: View {
@State var value: String = ""
var body: some View {
TextField("Amount", text: $value)
.onChange(of: value) {
print("changed")
print(value)
}
}
}
上面的代码正确地控制台记录了这一点:
changed
2
changed
我认为问题源于这样一个事实,即如果绑定变量是Double
,则空的TextField
被视为0
.但我仍然认为应该拨打.onChange
.当用户删除所有字符时,您有什么 idea 可以通知我吗?