SwiftUI TextField +步进器

问题描述

我正在尝试使用带有数字输入的TextField以及Stepper来控制数量。 在TextField中输入数字后,步进器将失去更改数字的功能。 我非常确定Binding值有一个窍门,但无法弄清楚到底是什么。

struct TestView: View {
  @State var quantity: Int = 0

  var body: some View {
    HStack {
      TextField("",value: $quantity,formatter: NumberFormatter())
      Stepper("",onIncrement: {
        self.quantity += 1
      },onDecrement: {
        self.quantity -= 1
      })
    }
  }
}

解决方法

这是因为在 date is_retweeted text sentiment 0 2020-09-01 No text1 SentimentY_result of text1 1 2020-09-02 No text2 SentimentY_result of text2 2 2020-09-03 Yes text3 SentimentX_result of text3 中使用NumberFormatterbugged

您可能需要改用自定义绑定:

TextField

也不要每次都重新创建struct ContentView: View { @State var quantity: Int = 0 static let formatter = NumberFormatter() var binding: Binding<String> { .init(get: { "\(self.quantity)" },set: { self.quantity = Int($0) ?? self.quantity }) } var body: some View { HStack { TextField("",text: binding) Stepper("",onIncrement: { self.quantity += 1 },onDecrement: { self.quantity -= 1 }) } } }

NumberFormatter

您可以使用仅创建一次的静态属性:

TextField("",value: $quantity,formatter: NumberFormatter())

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...