【SwiftUI 3.0】toggleStyle(.button) でボタン風スイッチを実装

SwiftUI 3.0 より Toggle の表示スタイル(toggleStyle)に .switch に加えて .button が選択できるようになりました。

Toggle の基本的な使い方のおさらいも兼ねて試してみましたので紹介します。

動作確認済環境

MacOSX 11.6(Big Sur)

Xcode 13.0

iOS 15.0

iPhone 13 mini シミュレータ

【SwiftUI 3.0】toggleStyle(.button) でボタン風スイッチを実装

おさらい

初期の SwiftUI から Toggle はありましたが、使い方のおさらいと既存の表示スタイルを確認しましょう。

引数の isOn: Bool<Binding> には @State or @Published の状態変数を渡します。

また、表示コンテンツとして label: Label を指定します(Label についてはこちらで紹介しています)。

@State var isOn: Bool
Toggle(isOn: $isOn) {
    Label("Wifi Network", systemImage: "wifi")
}

toggleStyle を指定しない場合は iOS 標準のスタイル(.switch)となります。

toggleStyle(.button)

toggleStyle に .button を指定すると以下のようにボタン風の表示になります。

isOn が false の状態
isOn が true の状態
サンプルコード
struct ContentView: View {
    
    @State private var isOn = false
    
    var body: some View {
        Toggle(isOn: $isOn) {
            Label("Wifi Network", systemImage: isOn ? "wifi" : "wifi.slash")
        }
        .padding()
        .controlSize(.large)
        .toggleStyle(.button)
    }
}

領域をクリックすると tint で指定したカラーによって色が反転するようになっています。

Label 部分をカスタマイズすれば、独自のアプリデザインの要求に柔軟に対応できそうですね。

以上