小编m8x*_*w3r的帖子

使用双值识别 SwiftUI TextField 中的更改

我正在使用 TextField 让用户添加某物的价格。为了防止用户添加其他值作为数字,我将键盘类型更改为.decimalPad

stringValue每次角色更改时都会正确更新绑定。我现在的问题是doubleValue只有当用户按下回车键提交时才会更新。不幸的是,小数点键盘没有回车键来提交输入。因此,当我尝试在不按 Enter 键的情况下将值保存到核心数据对象时,会保存 0,而不是文本字段中的可见值(例如 17.12)。现在为了测试,我将使用另一种带有输入按钮的键盘类型,但对于生产来说,这需要以某种方式修复。

您有什么想法可以解决这个问题吗?下面是最小化的示例代码来显示问题。

struct ContentView: View {
@State private var doubleValue: Double = 0.0
@State private var stringValue = "Test"

private let numberFormatter: NumberFormatter = {
    let numberFormatter = NumberFormatter()
    numberFormatter.numberStyle = .currency
    return numberFormatter
}()

var body: some View {
    Form {
        TextField("", text: $stringValue)
            .disableAutocorrection(true)
        HStack {
            Text("Price")
            Spacer()
            TextField("", value: $doubleValue, formatter: numberFormatter)
                .fixedSize()
                .keyboardType(.decimalPad)
        }
        // show live value changes
        Text("\(stringValue)")
        Text("Value: \(doubleValue)")
    }
    .padding() …
Run Code Online (Sandbox Code Playgroud)

double commit textfield swiftui

8
推荐指数
2
解决办法
5893
查看次数

标签 统计

commit ×1

double ×1

swiftui ×1

textfield ×1