问题描述
我正在尝试使用带有数字输入的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
中使用NumberFormatter
是bugged。
您可能需要改用自定义绑定:
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())