SwiftUI 文本字段 + 步进器
SwiftUI TextField + Stepper
我正在尝试实现一个带有数字输入的 TextField 以及 Stepper 来控制数量。
在 TextField 中输入数字后,Stepper 将失去更改数字的能力。
我很确定 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
})
}
}
}
这是因为在TextField
中使用NumberFormatter
是。
您可能需要改用自定义绑定:
struct ContentView: View {
@State var quantity: Int = 0
static let formatter = NumberFormatter()
var binding: Binding<String> {
.init(get: {
"\(self.quantity)"
}, set: {
self.quantity = Int([=10=]) ?? 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())
您可以使用只创建一次的静态 属性:
static let formatter = NumberFormatter()
我在 Stepper
和 TextField
上遇到了类似的问题,所以我决定制作一个 Swift 包来解决这个问题。
我正在尝试实现一个带有数字输入的 TextField 以及 Stepper 来控制数量。 在 TextField 中输入数字后,Stepper 将失去更改数字的能力。 我很确定 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
})
}
}
}
这是因为在TextField
中使用NumberFormatter
是
您可能需要改用自定义绑定:
struct ContentView: View {
@State var quantity: Int = 0
static let formatter = NumberFormatter()
var binding: Binding<String> {
.init(get: {
"\(self.quantity)"
}, set: {
self.quantity = Int([=10=]) ?? 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())
您可以使用只创建一次的静态 属性:
static let formatter = NumberFormatter()
我在 Stepper
和 TextField
上遇到了类似的问题,所以我决定制作一个 Swift 包来解决这个问题。