原因

アラートが表示されないときの原因は、主に3つあります。
toolbar内に入っている
//省略
.toolBar {
toobarItem(placement : .bottom) {
//ビュー
}
.alert(/*アラート構造体*/)
}
1つ目は、toolBar内にalertモディファイアが入っていることです。
toolBarのビューは、他のビューとは扱いが違っているので、アラートが上手く表示されないです。
なので、toolBarの中にalertモディファイアがあるなら、toolBar外の別のビューに移しましょう。
連続表示
2つ目は、アラートを連続で表示させていることです。
連続というのは、アラートのボタンをタップしたら、別のアラートが表示されるというものです。
連続アラートを使っている場合は、2つ目のアラートで時間を空けたりするのがいいようです。
以下の記事が参考になります。
【SwiftUI】Alert を連続表示しようとすると2つ目が出ない問題と対処方法 – .NET ゆる〜りワーク
alertモディファイアの重複
3つ目は、alertモディファイアが重複していることです。
@State var onAlert = false
@State var onAlertT = false
var body: some View {
VStack {
Button(action: {
self.onAlert = true
}) {
Text("アラート1")
}
.padding()
Button(action: {
self.onAlertT = true
}) {
Text("アラート2")
}
.padding()
}
.alert(isPresented: $onAlert) {
Alert(title: Text("アラート1"), message: Text(""),dismissButton: .default(Text("OK")))
}
.alert(isPresented: $onAlertT ) {
Alert(title: Text("アラート2"), message: Text(""),dismissButton: .default(Text("OK")))
}
}
上記のように、alertモディファイアを重複させると、2つ目のアラートは表示されるのですが、1つ目が表示されません。
これは、モディファイアは重複すると、後から書いた方で上書きされるからです。
2つ目のアラートで上書きされて、1つ目のアラートがアラートがなくなると言うことです。
もし、2つのアラートを使い分けたい場合は、条件分岐などを使うようにしましょう。
まとめ
アラートが表示されなくなる原因は、次の3つです。
- toolBar内に入っている
- 連続表示
- alertモディファイアが重複している
当てはまる場合は、修正しましょう。
コメント