我想在步进器的值为零时禁用一半的步进器。
我在步进器上尝试了 .disabled 功能,但它禁用了整个步进器,我只想禁用步进器的递减部分。
struct StepperLabelView : View {
@ObservedObject var social: Social
var body: some View {
VStack {
Stepper(onIncrement: {
self.social.quantity += 1
socialsInCanvas += [Social(companyName: self.social.companyName)]
}, onDecrement: {
self.social.quantity -= 1
socialsInCanvas.removeLast()
}, label: { Text("") })
.disabled(social.quantity == 0)
}
.padding()
}
}
Stepper
可以在一定范围内激活每个按钮:
struct ContentView : View {
@State var quantity = 3
var body: some View {
VStack {
Stepper("Count: \(quantity)", value: $quantity, in: 0...Int.max)
}
.padding()
}
}
您可以使用
onEditingChanged
参数来添加额外的工作。
您也可以在quantity
上观察:
@State var quantity = 3 {
didSet {
if oldValue < quantity {
// Probably + button touched
return
}
if oldValue > quantity {
// Probably - button touched
return
}
if oldValue == quantity {
// Unknown
}
}
}
您可以将 onDecrement 代码包装在条件中,或使用两个按钮自行编写。
HStack {
Button(
action: { self.item += "+" },
label: { Image(systemName: "plus.circle") }
)
Text(item)
Button(
action: { self.item += "-" },
label: { Image(systemName: "minus.circle") }
)
}
只需在适当的时候禁用“-”按钮即可。 plus.square 可能是一个更好的符号,https://sfsymbols.com 是比较它们的好地方。
另一种替代方法是用户
Stepper(_:onIncrement:onDecrement:)
并将您的自定义条件放入 onIncrement
和 onDecrement
回调中。
以下是苹果的例子
import SwiftUI
struct StepperView: View {
@State private var value = 0
let colors: [Color] = [.orange, .red, .gray, .blue, .green,
.purple, .pink]
func incrementStep() {
value += 1
if value >= colors.count { value = 0 }
}
func decrementStep() {
value -= 1
if value < 0 { value = colors.count - 1 }
}
var body: some View {
Stepper(onIncrement: incrementStep,
onDecrement: decrementStep) {
Text("Value: \(value) Color: \(colors[value].description)")
}
.padding(5)
.background(colors[value])
}
}