iOS

SwiftUIでアプリ共通のアラートを表示する方法

カメラで招待状のQRコードを読み込んでSwiftUIを使ったアプリを起動させ、アプリがどんな画面を開いていようと招待状に関するアラートを表示させたい、という状況があったので、その実装方法を解説します。

強制アップデートなどでも使えそうですね。

早速実装

こんな感じで、初期画面を書いているエントリーポイントをZStackで囲み、そこにalertモディファイヤを書いておくと、どの画面を開いていても共通のアラートを表示できます。

ZStackで囲んでいない場合は、TopViewが表示している時しかアラートを表示できません。

import SwiftUI

@main
struct hogeApp: App {
    @State var showAlert = false
    
    var body: some Scene {
        
        WindowGroup {
        	// ZStackで初期画面を囲むのがポイント!
            ZStack {
                TopView()
            }
            .onOpenURL { (url) in
                // 招待状のQRコードの内容を処理するコード
                showAlert = true
            }
            .alert("", isPresented: $showAlert, actions: {
                Button("OK") {
                    print("OK")
                }
            }, message : {
                Text("ようこそ!")
            })
        }
    }
}