SwiftUI TextField中的货币输入

时间:2019-07-30 19:46:45

标签: swift swiftui

我正在尝试实现在编辑模式详细视图中更改货币值的功能,但是我正在努力获取格式化的输入值以使数字值正常工作。

struct JobDetailView_Edit: View {

@State var jobDetails: JobDetails

var currencyFormatter: NumberFormatter = {
    let f = NumberFormatter()
    f.numberStyle = .currency
    return f
}()

var body: some View {
    Form {

                Section(header: Text("General")) {
                    HStack {
                        Text("Job Name")
                        Spacer()
                        TextField($jobDetails.jobName)
                            .multilineTextAlignment(.trailing)
                    }

                    TextField($jobDetails.hourlyRateBasic, formatter: currencyFormatter)

                }
... other unimportant code...

数据正确传递,并且文本字段显示存储在$ jobDetails.hourlyRateBasic中的格式化值,但是,如果它是字符串,我将无法编辑该字段。如果我尝试编辑该字段,然后在模拟器中按Enter,则会收到以下错误消息:

[SwiftUI] Failure setting binding's value. The supplied formatter does not produce values of type Double. This may be resolved by ensuring the binding and the output of the formatter are of the same type.

FYI $ jobDetails.hourlyRateBasic的类型为double。

2 个答案:

答案 0 :(得分:5)

我创建了一个包裹UITextfield的组件。

您可以在此处https://github.com/youjinp/SwiftUIKit

进行检查

这是演示

currency text field demo

答案 1 :(得分:1)

Ben Scheirman创建了一个Tip计算器,该计算器使用TextField和货币格式化程序。他的代码与您的代码之间的区别在于,他将货币值存储在Double?中。 NumberFormatter返回一个NSNumber?。

您可以在https://github.com/nsscreencast/397-swiftui-tip-calculator上查看他的代码