TextField格式:.number适合设置数字格式

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

我有以下代码用于格式化文本字段中的字符串。但是,它不遵守设置中设置的规则,这意味着对于像 123456.00 这样的字符串,我得到 123,456.00 而不是 123456,00。

struct HomeView: View {
    @FocusState private var isFocused: Bool
    @State var value: Double?
    
    var body: some View {
        VStack {
            Text("\(value ?? 0, format: .number)")
                .font(.title)
            TextField("0.0",
                      value: $value,
                      format: .number.locale(.current))
            .onSubmit {
                print("asdas")
            }
            .focused($isFocused)
            .border(.red)
            .keyboardType(.decimalPad)
            .toolbar {
                ToolbarItemGroup(placement: .keyboard) {
                    if isFocused {
                        Spacer()
                        Button("Done") {
                            isFocused = false
                        }
                    }
                }
            }
        }
    }
}

是否有不同的方法来实现这一目标,或者我错过了什么?

swift swiftui formatting
1个回答
0
投票
struct HomeView: View {
@FocusState private var isFocused: Bool
@State var value: Double?

private var numberFormatter: NumberFormatter = {
    let formatter = NumberFormatter()
    formatter.numberStyle = .decimal
    formatter.minimumFractionDigits = 2
    formatter.maximumFractionDigits = 2
    formatter.decimalSeparator = ","
    formatter.groupingSeparator = ""
    return formatter
}()

var body: some View {
    VStack {
        Text(value.map { numberFormatter.string(from: NSNumber(value: $0)) } ?? "0,00")
            .font(.title)
        TextField("0.0", value: $value, formatter: numberFormatter)
            .onSubmit {
                print("asdas")
            }
            .focused($isFocused)
            .border(.red)
            .keyboardType(.decimalPad)
            .toolbar {
                ToolbarItemGroup(placement: .keyboard) {
                    if isFocused {
                        Spacer()
                        Button("Done") {
                            isFocused = false
                        }
                    }
                }
            }
    }
}

}

© www.soinside.com 2019 - 2024. All rights reserved.