【SwiftUI】ビューコントローラー:Stepper

環境

Xcode16.1
Swift:6
iOS16

基本

概要

Stepperとは
※iOS13から
[-]と[+]のボタンで値を増減するビュー

パラメータ

label:ステッパーのラベル
value値を保持する数値型の状態変数を指定
in:値の範囲(省略可能)
step:増減値(省略可能)
onEditingChanged:値変更時の処理(省略可能)
onIncrement:増加値を指定(省略可能)
onDecrement:加減値を指定(省略可能)

Stepper("ラベル", value: $count, in: 0...10, step: 2)

Stepper(value: $count) {
    // ラベルとなるViewを記述
    Text("ラベル")
}


import SwiftUI

struct ContentView: View {
    @State private var count = 0

    var body: some View {
        Stepper("カウント:\(count)", value: $count)
            .padding()

        // カスタマイズする場合の書き方
        Stepper(value: $count){
            HStack {
                Image(systemName: "star")
                Text("カウント:\(count)")
            }
        }
        .padding()
    }
}

#Preview {
    ContentView()
}

範囲を指定(in)

// 0から10まで
Stepper("カウント:\(count)", value: $count, in: 0...10)

増減幅を指定(step)

// 2ずつ増減する
Stepper("カウント:\(count)", value: $count, step: 2)

値変更時の処理(onEditingChanged)

ボタン押下時とボタンを話した時で処理を行うことができる

import SwiftUI

struct ContentView: View {
    @State private var count = 0

    var body: some View {
        Stepper("カウント:\(count)", value: $count, onEditingChanged: { onTap in
            if onTap {
                print("押された")    // ボタンを押した時の処理
            } else {
                print("離された")    // ボタンを離した時の処理
            }}
        )
    }
}
#Preview {
    ContentView()
}

増加値と減少値をそれぞれ指定(onIncrement、onDecrement)

value、in、stepは使用不可。
onEditingChangedは使用可能。

import SwiftUI

struct ContentView: View {
    @State private var count = 0

    var body: some View {
        Stepper("カウント:\(count)",
            onIncrement: {
                count += 2    // 増加は2づつ
            },
            onDecrement: {
                count -= 1  // 減少は1づつ
            }
        )
    }
}
#Preview {
    ContentView()
}