Swiftでのトグルボタン実装のたったの10方法

Swift言語のロゴとトグルボタンのアイコンが組み合わされた画像Swift
この記事は約21分で読めます。

 

【サイト内のコードはご自由に個人利用・商用利用いただけます】

この記事では、プログラムの基礎知識を前提に話を進めています。

説明のためのコードや、サンプルコードもありますので、もちろん初心者でも理解できるように表現してあります。

基本的な知識があればカスタムコードを使って機能追加、目的を達成できるように作ってあります。

※この記事は、一般的にプロフェッショナルの指標とされる『実務経験10,000時間以上』を凌駕する現役のプログラマチームによって監修されています。

サイト内のコードを共有する場合は、参照元として引用して下さいますと幸いです

※Japanシーモアは、常に解説内容のわかりやすさや記事の品質に注力しております。不具合、分かりにくい説明や不適切な表現、動かないコードなど気になることがございましたら、記事の品質向上の為にお問い合わせフォームにてご共有いただけますと幸いです。
(送信された情報は、プライバシーポリシーのもと、厳正に取扱い、処分させていただきます。)

はじめに

この記事を読めば、Swiftでのトグルボタンの実装を10通りの方法で学ぶことができます。

トグルボタンは、ユーザーインターフェースの中で非常に重要な役割を果たす要素です。

特に、設定のオン・オフや、明るいモード・ダークモードなど、2つの選択肢の中で一方を選ぶ場面でよく用いられます。

Swiftを使用して、このトグルボタンを簡単に実装する方法を学ぶことで、より洗練されたアプリの開発が可能となります。

初心者から上級者まで、この記事を通してトグルボタンの作り方をマスターしてみませんか。

●トグルボタンとは?

トグルボタンとは、通常、2つの状態を持つボタンのことを指します。

これは、オンとオフ、真と偽、選択された/選択されていないなど、2つの状態のいずれかを示すボタンとして使用されます。

多くのアプリやウェブサイトでは、ユーザーの設定や選択を保存するための手段としてトグルボタンが使用されています。

○トグルボタンの基本的な仕組み

トグルボタンは、その名の通り「トグル」すなわち「切り替え」の動作を持ちます。

ボタンをクリックやタップすることで、ある状態から別の状態へと切り替わることが特徴です。

例えば、明るいモードとダークモードの切り替え、音のオン・オフ、通知の設定など、さまざまな場面でこのトグルボタンは利用されます。

Swiftでのトグルボタンの実装は、ボタンの状態を判定し、その状態に応じて処理を行うことが基本です。

トグルボタンの状態が変わるたびに、関連する動作やデザインの変更などが行われることが一般的です。

●Swiftでのトグルボタンの作り方

Swiftでのトグルボタンの実装は、直感的でシンプルです。

しかし、その背後にはSwiftの強力なフレームワークと機能が組み込まれています。

ここでは、トグルボタンの基本的な実装方法からカスタマイズ方法まで、10の異なるアプローチを紹介します。

○サンプルコード1:基本的なトグルボタンの作成

まずは、Swiftを使って基本的なトグルボタンを作成する方法を解説します。

import SwiftUI

struct ToggleButtonView: View {
    @State private var isOn = false

    var body: some View {
        Toggle(isOn: $isOn) {
            Text("トグルボタン")
        }.padding()
    }
}

struct ToggleButtonView_Previews: PreviewProvider {
    static var previews: some View {
        ToggleButtonView()
    }
}

このコードでは、SwiftUIのToggleを使ってトグルボタンを実装しています。

isOnという@State変数を使用してボタンの状態を管理しています。

実行すると、トグルボタンというテキストが表示されるトグルボタンが作成されます。

このボタンをタップすると、その状態がオンとオフの間で切り替わります。

○サンプルコード2:デザインをカスタマイズしたトグルボタン

次に、デザインをカスタマイズしたトグルボタンの作成方法を見ていきましょう。

import SwiftUI

struct CustomToggleButtonView: View {
    @State private var isOn = false

    var body: some View {
        Toggle(isOn: $isOn) {
            Text("カスタムトグルボタン")
        }
        .toggleStyle(SwitchToggleStyle(tint: .blue))
        .padding()
    }
}

struct CustomToggleButtonView_Previews: PreviewProvider {
    static var previews: some View {
        CustomToggleButtonView()
    }
}

このコードでは、toggleStyleメソッドを使用してトグルボタンのスタイルをカスタマイズしています。

特に、SwitchToggleStyleを使用し、tintで色を指定して、青色のトグルボタンを作成しています。

このコードを実行すると、カスタムトグルボタンというテキストが表示される青色のトグルボタンが作成されます。

同様にして、他の色やスタイルもカスタマイズすることができます。

○サンプルコード3:アニメーション付きのトグルボタン

トグルボタンにアニメーションを追加することで、ユーザーエクスペリエンスを向上させることができます。

SwiftUIでは、アニメーションの追加が非常に容易です。

ここでは、アニメーションを組み込んだトグルボタンの実装方法を紹介します。

import SwiftUI

struct AnimatedToggleButtonView: View {
    @State private var isOn = false

    var body: some View {
        Toggle(isOn: $isOn) {
            Text("アニメーション付きトグルボタン")
        }
        .padding()
        .background(isOn ? Color.green : Color.red)
        .animation(.default)
    }
}

struct AnimatedToggleButtonView_Previews: PreviewProvider {
    static var previews: some View {
        AnimatedToggleButtonView()
    }
}

このコードでは、トグルボタンの背景色を変更することで、オンとオフの状態を視覚的に識別しやすくしています。

isOn変数の値に応じて、背景色を緑色と赤色に変更します。

さらに、.animation(.default)を使用することで、色の変更が滑らかなアニメーションとして表示されるようになります。

このコードを実行すると、アニメーション付きトグルボタンというテキストが表示されるトグルボタンが作成されます。

ボタンをタップすると、背景色がアニメーションしながら変更されるのが確認できます。

○サンプルコード4:テキスト付きのトグルボタン

トグルボタンには、ステータスや情報を示すためのテキストを追加することも可能です。

ここでは、ボタンのオン/オフの状態に応じて表示するテキストを変更する方法を紹介します。

import SwiftUI

struct TextToggleButtonView: View {
    @State private var isOn = false

    var body: some View {
        Toggle(isOn: $isOn) {
            Text(isOn ? "オンです" : "オフです")
        }
        .padding()
    }
}

struct TextToggleButtonView_Previews: PreviewProvider {
    static var previews: some View {
        TextToggleButtonView()
    }
}

このコードでは、トグルボタンのラベルテキストをisOn変数の値に応じて動的に変更しています。

オンの場合は「オンです」というテキストが、オフの場合は「オフです」というテキストが表示されます。

このコードを実行すると、初めはオフですというテキストが表示されるトグルボタンが表示されます。

ボタンをタップすると、テキストがオンですに変更されることが確認できます。

○サンプルコード5:アイコンと併用したトグルボタン

アイコンを使用することで、トグルボタンをさらに視覚的に魅力的にすることができます。

SwiftUIでは、簡単にアイコンを組み込むことができます。

import SwiftUI

struct IconToggleButtonView: View {
    @State private var isOn = false

    var body: some View {
        Toggle(isOn: $isOn) {
            HStack {
                Image(systemName: isOn ? "sun.max.fill" : "moon.fill")
                Text("デイモードとナイトモードの切り替え")
            }
        }
        .padding()
    }
}

struct IconToggleButtonView_Previews: PreviewProvider {
    static var previews: some View {
        IconToggleButtonView()
    }
}

このコードでは、HStackを使用して、アイコンとテキストを水平方向に配置しています。

また、Image(systemName:)を使用して、システムアイコンを表示しています。

トグルボタンの状態に応じて、異なるアイコンを表示するようにしています。

実行すると、初めは月のアイコンとデイモードとナイトモードの切り替えというテキストが表示されるトグルボタンが表示されます。

ボタンをタップすると、アイコンが太陽のアイコンに変わることが確認できます。

●Swiftでのトグルボタンの応用例

トグルボタンは、シンプルなオン・オフの切り替えだけでなく、様々な応用的なシーンで使用することができます。

SwiftとSwiftUIを使用して、トグルボタンの応用例を詳しく解説していきます。

○サンプルコード6:トグルボタンでテーマを切り替える

アプリケーションには、デイモードとナイトモードのように、ユーザーの好みや環境に合わせてデザインを切り替えることが求められる場合があります。

下記のコードは、トグルボタンを使ってテーマを切り替える一例を表しています。

import SwiftUI

struct ThemeToggleButtonView: View {
    @State private var isDarkMode = false

    var body: some View {
        VStack {
            Toggle(isOn: $isDarkMode) {
                Text("ダークモード")
            }
            .padding()

            Text("テーマ切り替えのデモ")
            .padding()
            .background(isDarkMode ? Color.black : Color.white)
            .foregroundColor(isDarkMode ? Color.white : Color.black)
        }
        .padding()
    }
}

このコードでは、isDarkModeという変数を使って、トグルボタンのオン・オフに応じてテキストの背景色や文字色を変更しています。

トグルボタンをオンにすると、ダークモードになり、背景が黒く、文字が白く表示されます。

○サンプルコード7:トグルボタンを使ったリストのフィルタリング

トグルボタンは、リスト内のアイテムをフィルタリングするのにも使用できます。

例えば、完了したタスクのみを表示する、もしくは未完のタスクのみを表示するような場面で活用できます。

import SwiftUI

struct FilteringToggleButtonView: View {
    @State private var showCompleted = false
    @State private var tasks = [
        Task(name: "牛乳を買う", isCompleted: false),
        Task(name: "レポートを提出", isCompleted: true),
        Task(name: "ジムに行く", isCompleted: false)
    ]

    var body: some View {
        VStack {
            Toggle(isOn: $showCompleted) {
                Text("完了したタスクのみ表示")
            }
            .padding()

            List(tasks.filter { !$0.isCompleted || showCompleted }) { task in
                Text(task.name)
            }
        }
    }
}

struct Task: Identifiable {
    var id = UUID()
    var name: String
    var isCompleted: Bool
}

このコードを実行すると、トグルボタンとタスクのリストが表示されます。

トグルボタンがオフの状態では、全てのタスクがリストに表示されます。

しかし、トグルボタンをオンにすると、完了したタスクのみが表示されるようになります。

○サンプルコード8:トグルボタンを使って画像を表示・非表示にする

アプリケーションの中で、ユーザーが情報をコントロールしたい場面が数多く存在します。

特に、画像やメディアコンテンツを表示する際、表示・非表示を切り替えられる機能は非常に便利です。

SwiftUIを用いて、このようなトグルボタンの実装を行いましょう。

import SwiftUI

struct ImageToggleButtonView: View {
    @State private var isImageVisible = false
    var body: some View {
        VStack {
            Toggle(isOn: $isImageVisible) {
                Text("画像の表示/非表示")
            }
            .padding()

            if isImageVisible {
                Image("sampleImage")
                    .resizable()
                    .scaledToFit()
                    .padding()
            }
        }
    }
}

このコードでは、isImageVisibleという変数を使って、トグルボタンの状態(オン・オフ)を管理しています。

isImageVisibleの値が真である場合、Imageビューが表示されます。

逆に、isImageVisibleの値が偽の場合、画像は非表示となります。

トグルボタンをオンにすると、sampleImageという名前の画像が表示されます。

オフにすると、画像は非表示になります。

○サンプルコード9:複数のトグルボタンを組み合わせて操作

アプリケーションの設定画面やカスタマイズ画面で、複数のトグルボタンを使用して様々な設定を切り替えることは一般的です。

下記のコードは、複数のトグルボタンを組み合わせて操作する一例を表しています。

import SwiftUI

struct MultiToggleButtonView: View {
    @State private var isImageVisible = false
    @State private var isTextVisible = false

    var body: some View {
        VStack {
            Toggle(isOn: $isImageVisible) {
                Text("画像の表示/非表示")
            }
            .padding()

            Toggle(isOn: $isTextVisible) {
                Text("テキストの表示/非表示")
            }
            .padding()

            if isImageVisible {
                Image("sampleImage")
                    .resizable()
                    .scaledToFit()
                    .padding()
            }

            if isTextVisible {
                Text("これはサンプルテキストです。")
                    .padding()
            }
        }
    }
}

このコードでは、isImageVisibleisTextVisibleの2つの変数を使って、それぞれのトグルボタンの状態を管理しています。

それぞれのトグルボタンを操作することで、画像とテキストの表示・非表示を独立して制御することができます。

トグルボタンの組み合わせを変更することで、画像のみ、テキストのみ、または両方とも表示することができます。

○サンプルコード10:トグルボタンの状態を保存する

トグルボタンの状態をアプリケーションの次回起動時にも保持したい場合があります。

そのような場合には、UserDefaultsなどの永続的なストレージを用いて状態を保存します。

import SwiftUI

struct PersistentToggleButtonView: View {
    @AppStorage("isSettingEnabled") private var isSettingEnabled = false

    var body: some View {
        VStack {
            Toggle(isOn: $isSettingEnabled) {
                Text("設定の有効/無効")
            }
            .padding()
        }
    }
}

このコードでは、@AppStorageというプロパティラッパーを使って、トグルボタンの状態をisSettingEnabledというキーでUserDefaultsに保存しています。

この方法を用いると、アプリケーションを終了してもトグルボタンの状態が保持され、次回起動時にもその状態が反映されます。

トグルボタンをオンにしてアプリを終了し、再度起動すると、トグルボタンはオンの状態で表示されます。

●トグルボタン実装時の注意点と対処法

Swiftでトグルボタンを実装する際、効果的に動作するアプリケーションを構築するためのいくつかの注意点と対処法があります。

これらの注意点を考慮することで、ユーザーエクスペリエンスを向上させることができます。

○変更を検知する方法

SwiftUIでトグルボタンの状態の変更を検知するには、@State@Bindingなどのプロパティラッパーを使用します。

しかし、これらのラッパーだけでは、状態が変わったタイミングを正確に捉えるのは難しい場合があります。

そのため、トグルボタンの状態変更を監視する方法を紹介します。

import SwiftUI

struct DetectingToggleButtonView: View {
    @State private var isButtonToggled = false

    var body: some View {
        VStack {
            Toggle(isOn: $isButtonToggled) {
                Text("トグル")
            }
            .onChange(of: isButtonToggled) { newValue in
                // ここでトグルボタンの状態の変更を検知する
                print("トグルボタンの状態が\(newValue ? "オン" : "オフ")に変わりました")
            }
            .padding()
        }
    }
}

このコードでは、.onChange(of:isButtonToggled)メソッドを使用して、isButtonToggledの状態が変更されたときの動作を定義しています。

このメソッドを使用することで、トグルボタンの状態変更をリアルタイムで検知できます。

○トグルボタンの状態管理

トグルボタンの状態を管理する際、多くのアプリケーションで@Stateプロパティラッパーが使用されます。

しかし、親ビューや他の子ビューと状態を共有する場合は、@Stateだけでは不十分です。

そこで、@Binding@EnvironmentObjectといった方法を用いて、状態を効果的に管理する方法を紹介します。

import SwiftUI

class ToggleButtonViewModel: ObservableObject {
    @Published var isButtonToggled = false
}

struct ParentView: View {
    @StateObject var viewModel = ToggleButtonViewModel()

    var body: some View {
        VStack {
            ChildToggleButtonView(isButtonToggled: $viewModel.isButtonToggled)
            Text(viewModel.isButtonToggled ? "トグルオン" : "トグルオフ")
        }
    }
}

struct ChildToggleButtonView: View {
    @Binding var isButtonToggled: Bool

    var body: some View {
        Toggle(isOn: $isButtonToggled) {
            Text("トグル")
        }
        .padding()
    }
}

このコードでは、ToggleButtonViewModelというクラスを作成し、@Publishedプロパティラッパーを使用して、状態の変更を監視しています。

そして、ParentViewでこの状態を持ち、ChildToggleButtonViewに状態をバインドして渡します。

これにより、子ビューでの状態変更が親ビューにも反映されます。

●トグルボタンのカスタマイズ方法

SwiftUIを利用したトグルボタンの実装は、そのままでも十分に魅力的で使い勝手が良いものですが、特定のデザインや動作を求める場合、カスタマイズが必要になることがあります。

ここでは、トグルボタンのデザインの変更方法やアニメーションの追加方法を中心に解説します。

○デザインの変更

SwiftUIでは、トグルボタンのデザインを変更するのが非常に簡単です。

ここでは、トグルボタンの背景色やテキストの色をカスタマイズしたサンプルコードを紹介します。

import SwiftUI

struct CustomDesignToggleButtonView: View {
    @State private var isToggled = false

    var body: some View {
        Toggle(isOn: $isToggled) {
            Text("カスタマイズしたトグルボタン")
        }
        .toggleStyle(SwitchToggleStyle(tint: .purple))
        .padding()
    }
}

このコードでは、SwitchToggleStyle(tint: .purple)を使用して、トグルの色を紫に変更しています。

SwiftUIのトグルボタンは、これだけでデザインを変更することができ、非常に簡単にカスタマイズできます。

○アニメーションの追加

アニメーションはユーザーエクスペリエンスを向上させる要素の一つです。

SwiftUIでは、トグルボタンの状態変更にアニメーションを追加することも可能です。

下記のサンプルコードは、トグルボタンをオン・オフした際に背景色がアニメーションとともに変わるものです。

import SwiftUI

struct AnimatedToggleButtonView: View {
    @State private var isToggled = false

    var body: some View {
        VStack {
            Toggle("アニメーション付きトグルボタン", isOn: $isToggled)
            .padding()
        }
        .background(isToggled ? Color.green : Color.red)
        .animation(.default)
    }
}

このコードでは、トグルボタンの状態(isToggled)に応じて背景色を変更しています。

さらに、.animation(.default)を追加することで、状態が変わるときの色の変化にアニメーションが適用されます。

まとめ

今回は、SwiftUIを活用することで、トグルボタンの実装やカスタマイズが非常に簡単かつ効率的に行えることを解説しました。

初心者から上級者まで、手軽にトグルボタンのデザインや動作をカスタマイズし、ユーザーエクスペリエンスを向上させることができます。

今回は、基本的なトグルボタンの作成から、デザインのカスタマイズやアニメーションの追加まで、Swiftでのトグルボタン実装の多岐にわたるテーマについて詳しく解説しました。

この知識を活用し、アプリケーション開発の際に柔軟で魅力的なUIを実現する手助けとしてください。

最後に、Swift言語は日々進化しており、さらに新しい方法やテクニックが登場する可能性があります。

トグルボタン実装に関する最新情報や技術を学び続けることで、より洗練されたアプリケーションを開発することができるでしょう。

アプリケーション開発の旅に、今回の記事が少しでもお役に立てれば幸いです。