我在使用 TextField 输入货币金额时遇到了 SwiftUI 最终用户的可用性问题。
绑定字段是双精度型,初始设置为 0,当显示文本字段时,提示为 $0.00。
问题是,当用户想要输入一个值时,他们必须手动使用退格键删除 0.00。另外,如果他们不小心在 $ 符号上退格,则此后输入的任何值都会消失!
当存在多个货币字段时,这对于最终用户来说是一个真正的麻烦。
我在网上看到了设置的建议formatter.zeroSymbol = ""
在 NumberFormatter 中,但是当numberStyle = .currency
输入的任何值都会丢失/损坏。
如果我将数字样式更改为.decimal
,我可以使用zeroSymbol
选项,它似乎有效,但我失去了货币格式。
有谁知道如何解决这一问题?
以下是您可以运行来演示此问题的示例代码。
import SwiftUI
struct ContentView: View {
@State private var amount: Double = 0
let currencyFormat: NumberFormatter = {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
// formatter.zeroSymbol = ""
return formatter
}()
var body: some View {
HStack {
Text("Enter Amount")
Spacer()
TextField("", value: $amount, formatter: currencyFormat)
.keyboardType(.numbersAndPunctuation)
}
.padding()
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
详细阐述@Zulqarnain Naveed 的答案:
TextField("",value: $amount, format: .currency(code: Locale.current.currency?.identifier ?? "USD"))
添加以下代码行。当聚焦时,这将选择文本字段中的所有文本:
.onReceive(NotificationCenter.default.publisher(for: UITextField.textDidBeginEditingNotification)) { obj in
if let textField = obj.object as? UITextField {
textField.selectedTextRange = textField.textRange(from: textField.beginningOfDocument, to: textField.endOfDocument)
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)