在 SwiftUI 中动态更改货币格式
Dynamically Change Currency Format in SwiftUI
我正在尝试制作一个非常简单的应用程序,它会在用户选择首选货币时更改文本字段的格式
struct ContentView: View {
@State var currency = "EUR"
@State var amount = 0.0
let currencies = ["GBP", "USD", "EUR", "WON", "LKR"]
var body: some View {
Form {
TextField(
"Amount",
value: $amount,
format: .currency(code: currency)
)
Picker("Currency", selection: $currency) {
ForEach(currencies, id: \.self) {
Text([=10=])
}
}
.pickerStyle(.segmented)
Section {
Text("Selected: \(currency)")
}
}
.navigationTitle("Currency Picker Issue")
}
}
这次尝试有两个主要问题:
- 选择新货币实际上并没有改变金额字段的格式
- 在金额中输入新值不会保存该值(一旦该字段失去焦点,它就会回零
为什么会这样?
有什么方法可以在 SwiftUI 中实现这样的功能吗?
对于第 1 个问题,您可以通过在 TextField 上使用 .id
强制 SwiftUI 重绘:
TextField(
"Amount",
value: $amount,
format: .currency(code: currency)
)
.id(currency) // forces redraw of view when changed
你的2.问题我无法重现,至少只要你输入一个有效的金额。
我正在尝试制作一个非常简单的应用程序,它会在用户选择首选货币时更改文本字段的格式
struct ContentView: View {
@State var currency = "EUR"
@State var amount = 0.0
let currencies = ["GBP", "USD", "EUR", "WON", "LKR"]
var body: some View {
Form {
TextField(
"Amount",
value: $amount,
format: .currency(code: currency)
)
Picker("Currency", selection: $currency) {
ForEach(currencies, id: \.self) {
Text([=10=])
}
}
.pickerStyle(.segmented)
Section {
Text("Selected: \(currency)")
}
}
.navigationTitle("Currency Picker Issue")
}
}
这次尝试有两个主要问题:
- 选择新货币实际上并没有改变金额字段的格式
- 在金额中输入新值不会保存该值(一旦该字段失去焦点,它就会回零
为什么会这样?
有什么方法可以在 SwiftUI 中实现这样的功能吗?
对于第 1 个问题,您可以通过在 TextField 上使用 .id
强制 SwiftUI 重绘:
TextField(
"Amount",
value: $amount,
format: .currency(code: currency)
)
.id(currency) // forces redraw of view when changed
你的2.问题我无法重现,至少只要你输入一个有效的金额。