【2024年4月】弊社では、基本リモートワークで一緒に成長してくださるメンバーを広く募集させていただいております。 詳細はこちら

【Swift】UISwitchを利用したトグルボタンの実装方法からカスタマイズする方法まで徹底解説!

【Swift】UISwitchを利用したトグルボタンの実装方法からカスタマイズする方法まで徹底解説!
ふくしま

こんにちは!株式会社メモリアインクのふくしまです!

本記事では、UIKitフレームワークでトグルボタンを実装し、カスタマイズする方法を学びます。

この記事を読んで分かること…
・UISwitchとは?
・UISwitchを使用したトグルボタンの基本的な実装方法
・トグルボタンのカスタマイズ方法

目次

UISwitchとは?

UISwitchは、iOSアプリケーション開発において、UIKitフレームワークが提供するUIコンポーネントの一つです。主に設定画面でのオン/オフ切り替えや、二項選択をユーザーに提供するために使用されます。視覚的には、スライドすることでオン(通常は緑色)とオフ(灰色)の状態を切り替えることができるスイッチとして表示されます。

トグルボタンの基本的な実装方法

概要

ユーザーがフォームやアンケートに回答する際、特定の質問に対する「はい/いいえ」や「同意する/同意しない」などの二択回答を選択する場面を例にサンプルコードを示しつつ解説していきます。

サンプルコード

import UIKit

class SurveyViewController: UIViewController {
    
    private let agreementSwitch: UISwitch = {
        let switchControl = UISwitch()
        switchControl.translatesAutoresizingMaskIntoConstraints = false
        switchControl.isOn = false // スイッチの初期状態をオフに設定
        return switchControl
    }()
    
    private let agreementLabel: UILabel = {
        let label = UILabel()
        label.text = "同意しない" // ラベルの初期テキストを「同意しない」に設定
        label.translatesAutoresizingMaskIntoConstraints = false
        return label
    }()
    
    override func viewDidLoad() {
        super.viewDidLoad()
        view.backgroundColor = .white
        
        view.addSubview(agreementSwitch)
        view.addSubview(agreementLabel)
        
        setupConstraints()
        agreementSwitch.addTarget(self, action: #selector(toggleAgreement), for: .valueChanged)
        
        updateLabelForSwitchState() // 追加: 初期状態でラベルを更新する
    }
    
    private func setupConstraints() {
        NSLayoutConstraint.activate([
            agreementSwitch.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            agreementSwitch.centerYAnchor.constraint(equalTo: view.centerYAnchor, constant: -20),
            agreementLabel.centerXAnchor.constraint(equalTo: view.centerXAnchor),
            agreementLabel.topAnchor.constraint(equalTo: agreementSwitch.bottomAnchor, constant: 20)
        ])
    }
    
    @objc private func toggleAgreement() {
        updateLabelForSwitchState()
    }
    
    private func updateLabelForSwitchState() {
        // UISwitchの状態に応じてラベルのテキストを更新
        if agreementSwitch.isOn {
            agreementLabel.text = "同意する"
        } else {
            agreementLabel.text = "同意しない"
        }
    }
}

サンプルコードの説明

◾️行 1: UIKitフレームワークをインポートします。これはUIコンポーネントを使用するために必要です。
◾️行 5-10: UISwitchのインスタンスagreementSwitchをプライベートプロパティとして宣言し、初期化しています。
◾️行 6-9: agreementSwitchの設定を行っています。Auto Layoutを使用するためにtranslatesAutoresizingMaskIntoConstraintsfalseに設定し、スイッチの初期状態をオフ(false)に設定しています。
◾️行 12-17: UILabelのインスタンスagreementLabelをプライベートプロパティとして宣言し、初期化しています。初期テキストを「同意しない」に設定しています。
◾️行 19-29: viewDidLoadメソッドで、ビューがロードされた後の処理を定義しています。スイッチとラベルをビューに追加し、レイアウトの設定とイベントハンドラの追加を行っています。
◾️行 32-38: setupConstraintsメソッドで、agreementSwitchagreementLabelのレイアウト制約を設定しています。
◾️行 41-42: toggleAgreementメソッドは、スイッチの状態が変更されたときに呼ばれます。このメソッド内でラベルのテキスト更新を行っています。
◾️行 45-51: updateLabelForSwitchStateメソッドでは、スイッチの状態に応じてラベルのテキストを「同意する」または「同意しない」に更新しています。

動作確認

ふくしま

それではビルドして、動作確認をしてみましょう!

【Swift】UISwitchを利用したトグルボタンの実装方法からカスタマイズする方法まで徹底解説!

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

UISwitchのカスタマイズできるオプション

  • onTintColor: スイッチがオンの状態の時の背景色を設定します。
  • thumbTintColor: スイッチのノブ(切り替える部分)の色を設定します。
  • isOn: スイッチの現在のオン/オフ状態を設定または取得します。プログラムによってこのプロパティを変更することで、スイッチの状態を動的に制御できます。
  • isEnabled: スイッチが有効(ユーザーが操作可能)かどうかを設定または取得します。falseに設定すると、スイッチは無効化され、ユーザー操作を受け付けなくなります。

使用例

        // スイッチがオフのときの枠線の色を赤に設定
        switchControl.tintColor = UIColor.systemRed
        // スイッチのノブの色を白に設定
        switchControl.thumbTintColor = UIColor.blue
        // スイッチをオンの状態に設定
        switchControl.isOn = true
        // スイッチを有効に設定
        switchControl.isEnabled = true

以下の記事では、チェックボックスを使ったトグルボタンの実装方法を紹介しています!
ご興味があれば、併せてご覧ください!

まとめ

いかがでしたか?
本記事では、UISwitchを利用したトグルボタンの実装からカスタマイズ方法までのプロセスを徹底解説しました。
この記事が、皆様の開発の一助となれれば幸いです。

ふくしま

この記事があなたのスキルアップに役立ったなら、次のキャリアステップを踏み出す絶好の機会かもしれません。エンジニアとしてのさらなる成長と挑戦を求めるなら、
未経験からIT・Webエンジニアを目指すなら【ユニゾンキャリア】
をオススメします!

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

コメント

コメントする

目次