Kaz3141
@Kaz3141

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

SwiftUIでAlertとSheetを同時に表示したい

解決したいこと

SwiftUIでAppの起動時に、AlertとSheetを表示しようとしています。
AlertとSheetの表示条件が同時にtrueになったときに、両方とも表示させる方法を教えていただきたいです。

発生している問題

AlertとSheetの表示条件は、それぞれAppStorageに保存しています。

AlertとSheetの表示条件が同時にtrueになったとき、Alertは表示されますが、Sheetが表示されません。

問題の再現例のソースコード

import SwiftUI

struct ContentView: View {
    @AppStorage("isShowTutrial") var isShowTutrial = true
    @AppStorage("isAlert")  var isAlert = true

    var body: some View {
        VStack {
            Image(systemName: "globe")
                .imageScale(.large)
                .foregroundColor(.accentColor)
            Text("Hello, world!")
        }
        .padding()
        .sheet(isPresented: $isShowTutrial) {
            Text("Sheet")
        }
        .alert("Alert",isPresented: $isAlert,actions:{}){
            Text("・message")
        }
    }
}

自分で試したこと

・.sheetと.alertの順番を入れ替える。
・.alertを付けているViewの内側のViewに.sheetを付ける。またその逆。

0

1Answer

.alert("Alert", isPresented: $isAlert, actions: { }) {
    Text("・message")
        .sheet(isPresented: $isShowTutrial) {
            Text("Sheet")
        }
}

上のように.sheetの内側に.alertを定義することで、AlertとSheetの表示条件の同時trueに対応できますが、逆に、Alertだけtrueの場合に.alertが表示されなくなります。

AlertとSheetの同時trueの場合の.alertと、Alertだけtrueの場合の.alertを分けて二つ実装することで回避できそうな気がします。

0Like

Comments

  1. @Kaz3141

    Questioner

    回答ありがとうございます。Alertの中にSheetを仕込むのは盲点でした。
    これで何とか目的は達成できそうです。
    回答を参考にこちらでも試してみて、引き続きよりスマートな実装方法を研究してみたいと思います。
    ありがとうございました。

  2. 説明していることとコードがあっていませんでした。
    すでにいろいろ試されているとは思いますが、訂正しておきます。

     .sheet(isPresented: $isShowTutrial) {
        Text("Sheet")
             .alert("Alert", isPresented: $isAlert, actions: { }) {
                Text("・message")
            }
    }
    

    すでに解決済みであれば、本Q&Aをクローズしていただいて結構です。

Your answer might help someone💌