是否可以禁用步进器的一半

时间:2019-08-04 06:50:44

标签: swift swiftui

我想在步进器的值为零时禁用步进器的一半。

我在步进器上尝试了.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()
    }
}

2 个答案:

答案 0 :(得分:2)

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
        }

    }
}

答案 1 :(得分:-1)

您可以将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是比较它们的好地方。