web-dev-qa-db-ja.com

swiftUIでアラートを表示する方法

swiftUIAlertタイプを発見しました。しかし、それをpresentationメソッドでどのように表示するのか疑問に思います。

Alertの初期化はとても簡単です。しかし、バインディングの使い方は?

struct ContentView : View {
    var body: some View {
        Button(action: {
            // Don't know how to use the `binding` below
            presentation(binding, alert: {
                Alert(title: Text("Hello"))
            })
        }, label: {
            Text("asdf")
        })
    }
}

バインディングのタイプはBinding<Bool>

12
struct ContentView: View {

    @State var aAlert = false

    var body: some View {
        Text("Alert").tapAction {
            self.aAlert = true
        }.presentation($aAlert, alert:{ Alert(title: Text("Alert"))})
    }
}
1
CrazyPro007

@tspの回答に加えて、2つのボタンでアラートを表示し、ボタンのタップアクションを処理するには、次のようにします。

@State var showAlert = false

var body: some View {
  Button(action: {
    self.showAlert = true
  }) {
    Text("Show Alert")
  }
  .presentation($showAlert) {
      Alert(title: Text("Title"), message: Text("Message..."),
          primaryButton: .default (Text("OK")) {
            print("OK button tapped")
          },
          secondaryButton: .cancel()
      )
  }
}

結果:

enter image description here

SwiftUI

最初に基本的なアラートを作成します。

Alert(title: Text("Alert title"), message: Text("Alert message"), dismissButton: .default(Text("Got it!")))

次に、アラートが表示されるかどうかを示すバインド可能な条件を定義します。その状態を切り替えて、アラートを表示/非表示にします。

struct ContentView: View {
    @State private var showingAlert = false

    var body: some View {
        Button(action: {
            self.showingAlert = true
        }) {
            Text("Show Alert")
        }
        .alert(isPresented: $showingAlert) {
            Alert(title: Text("Important message"), message: Text("Wear sunscreen"), dismissButton: .default(Text("Got it!")))
        }
    }
}
0