SwiftUI 中仅接受数字和一位小数点的 TextField

问题描述 投票:0回答:1

我寻找解决这个问题的好方法,但我发现的任何问题都不能满足我的需求。我正在为此苦苦挣扎。

我需要的是一个

TextField
,它只接受格式为
0123456789.
%.2f
,并且不需要按回车键来提交。接收值为
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
。比如打字、移动、重复。用户体验非常差。

swift swiftui double decimal number-formatting
1个回答
0
投票

从 iOS17 开始,您可以使用以下功能:

.onChange(of: text, { oldValue, newValue in
    if newValue != "" && Double(newValue) == nil {
        text = oldValue
    }
})
© www.soinside.com 2019 - 2024. All rights reserved.