我试图格式化为用户输入一个值到文本字段。我已经有了下面的代码,但我找不到一种方法来做到这一点到文本字段。
import SwiftUI
struct ContentView: View {
@State private var amount: String = ""
@State private var formattedAmount: String = ""
var body: some View {
VStack {
Text("Valor: \(formattedAmount)")
TextField("Valor", text: $amount)
.textFieldStyle(.roundedBorder)
.padding()
.keyboardType(.numberPad)
.onChange(of: amount, perform: { value in
updateFormattedAmount()
})
}
}
private func updateFormattedAmount() {
guard let number = Double(amount) else {
formattedAmount = ""
return
}
let formatter = currencyFormatter
formattedAmount = formatter.string(from: NSNumber(value: number / 100)) ?? ""
}
private var currencyFormatter: NumberFormatter {
let formatter = NumberFormatter()
formatter.numberStyle = .currency
formatter.currencyCode = "BRL"
formatter.currencySymbol = "R$"
formatter.minimumFractionDigits = 2
formatter.maximumFractionDigits = 2
formatter.groupingSeparator = "."
formatter.usesGroupingSeparator = true
return formatter
}
}
这是我在UI上看到的:
我希望在文本域中显示我对formattedAmount var所做的操作。
3条答案
按热度按时间bihw5rsg1#
我喜欢使用
TextField
的新format:
API,例如。或
olhwl3o22#
改变
到
然后,当用户“提交”时,它将使用所有格式化程序设置更改该字段。
91zkwejq3#
是的,上面的答案建议@lorem ipsum是正确的,但你必须明白的是,当编辑Textfield可以反映这些变化,一旦你关闭键盘。如果你想实现这一点,你必须在
UITextField
的shouldChangeCharacterIn
API中为UITextFieldDelegate
编写Coordinators
。另外,你已经写的代码,你不需要写那么多就可以达到相同的效果。你可以直接在TextField API上使用Formatter,如下面的代码。请看下面的代码。它会按照你想要的方式工作,但点击完成按钮。同样,如果你不需要完成按钮,请回顾这篇文章,这是最接近的方法与你的问题相似。
How to Use Currency Input in a UITextField希望有帮助。