SwiftUI TextField with formatter not working?

前端 未结 5 1894
走了就别回头了
走了就别回头了 2020-11-29 02:00

I\'m trying to get a numeric field updated so I\'m using a TextField with the formatter: parameter set. It formats the number into the entry field just fine, but does not up

5条回答
  •  死守一世寂寞
    2020-11-29 02:40

    You can use Binding to convert Double<-->String for TextField

    struct TestView: View {
        @State var someNumber = 123.0
    
        var body: some View {
            let someNumberProxy = Binding(
                get: { String(format: "%.02f", Double(self.someNumber)) },
                set: {
                    if let value = NumberFormatter().number(from: $0) {
                        self.someNumber = value.doubleValue
                    }
                }
            )
    
            return VStack {
                TextField("Number", text: someNumberProxy)
    
                Text("number: \(someNumber)")
            }
          }
    }
    
    

    You can use computed property way to solve this issue. (thanks @ iComputerfreak)

    struct TestView: View {
        @State var someNumber = 123.0
    
        var someNumberProxy: Binding {
            Binding(
                get: { String(format: "%.02f", Double(self.someNumber)) },
                set: {
                    if let value = NumberFormatter().number(from: $0) {
                        self.someNumber = value.doubleValue
                    }
                }
            )
        }
    
        var body: some View {
            VStack {
                TextField("Number", text: someNumberProxy)
    
                Text("number: \(someNumber)")
            }
          }
    }
    

提交回复
热议问题