Contents

init(_:value:in:step:onEditingChanged:)

Creates a stepper instance that increments and decrements a binding to a value, by a step size and within a closed range that you provide.

Declaration

@export(implementation) nonisolated init<V>(_ titleResource: LocalizedStringResource, value: Binding<V>, in bounds: ClosedRange<V>, step: V.Stride = 1, onEditingChanged: @escaping (Bool) -> Void = { _ in }) where V : Strideable

Parameters

  • titleResource:

    Text resource for the stepper’s localized title describing the purpose of the stepper.

  • value:

    A Binding to a value that your provide.

  • bounds:

    A closed range that describes the upper and lower bounds permitted by the stepper.

  • step:

    The amount to increment or decrement value each time the user clicks or taps the stepper’s increment or decrement button, respectively. Defaults to 1.

  • onEditingChanged:

    A closure that’s called when editing begins and ends. For example, on iOS, the user may touch and hold the increment or decrement buttons on a Stepper which causes the execution of the onEditingChanged closure at the start and end of the gesture.

Discussion

Use Stepper(_:value:in:step:onEditingChanged:) to create a stepper that increments or decrements a value within a specific range of values by a specific step size. In the example below, a stepper increments or decrements a binding to value over a range of 1...50 by 5 at each press of the stepper’s increment or decrement buttons:

struct StepperView: View {
    @State private var value = 0
    @State private var titleKey = "Stepper"

    let step = 5
    let range = 1...50

    var body: some View {
        VStack(spacing: 20) {
            Text("Current Stepper Value: \(value)")
            Stepper(titleKey, value: $value, in: range, step: step)
        }
    }
}

[Image]

See Also

Creating a stepper over a range