将文本字段格式化为2个小数位,而无需输入小数(SwiftUI)

时间:2019-10-29 10:51:08

标签: swiftui

我想在文本字段中,当用户输入数字时,例如12345,其格式为123.45。用户永远不需要输入小数位,它只使用最右边的2个数字作为小数位。该字段也应该只允许数字。这是一个SwiftUI项目。预先感谢您的协助。

1 个答案:

答案 0 :(得分:0)

由于您输入的内容和在TextField视图中显示的内容之间存在两种方式的绑定,因此似乎无法对输入的显示数字进行插值。我会建议一个小技巧:

  • 创建一个叠加了TextField和Text View的ZStack。
  • 在TextField中输入的文本的前景字体为透明或白色.foregroundColor(.clear)
  • 键盘只是没有小数点的数字:.keyboardType(.numberPad)
  • 使用.accentColor(.clear)隐藏光标
  • 结果显示在文本视图中,格式为specifier: "%.2f"

看起来像

这是代码:

struct ContentView: View {
    @State private var enteredNumber = ""
    var enteredNumberFormatted: Double {
        return (Double(enteredNumber) ?? 0) / 100
    }
    var body: some View {

        Form {
            Section {
                ZStack(alignment: .leading) {
                    TextField("", text: $enteredNumber)
                        .keyboardType(.numberPad).foregroundColor(.clear)
                        .textFieldStyle(PlainTextFieldStyle())
                        .disableAutocorrection(true)
                        .accentColor(.clear)
                    Text("\(enteredNumberFormatted, specifier: "%.2f")")
                }
            }
        }
    }
}