我正在寻找一种解决此问题的好方法,但是我发现的所有问题都无法满足我的需求。我为此感到挣扎。
我需要一个TextField
,它将只接受0123456789.
格式的%.2f
,并且不需要按Return键即可提交。接收值为Double
,然后返回Double
。
结果应为123.45
或1.23
。
我的尝试:
var title: String
let numberFormatter = NumberFormatter()
@Binding var value: Double
var amountProxy: Binding<String> {
Binding<String>(
get: { String(format: "%.2f", value) },
set: {
if let value = numberFormatter.number(from: $0) {
self.value = value.doubleValue
}
}
)
}
var body: some View{
HStack(spacing: 8){
Text(LocalizedStringKey(title + ":"))
.layoutPriority(1)
TextField(LocalizedStringKey(""), text: amountProxy)
.keyboardType(.decimalPad)
.multilineTextAlignment(.trailing)
}
.lineLimit(1)
}
此方法的结果是迫使用户键入一个数字并精确地移动到小数点后以获取请求的值4.20
。像打字,移动,重复一样。用户体验非常差。