簡體   English   中英

如何向用戶顯示警報?

[英]How to present alert to User?

我想問你如何向用戶顯示警報。 我剛試過:

.navigationBarItems(trailing: Button(action: {
      let alert = Alert(title: Text("Add category"), message: Text("Do you want add category?"), primaryButton: Alert.Button.default(Text("Yes"), onTrigger: {
           self.sceneries[0].sceneries.append(Scenery(name: "Name", imageName: "1"))
      }), secondaryButton: Alert.Button.cancel())
      self.presentation(self.$isShownAlert) { () -> Alert in
           return alert
      }
 }, label: {
      Text("Add category")
}))

但它告訴我它沒有使用並且沒有出現警報......

您需要在應顯示警報的視圖之上調用presentation API。

實現此目的的最佳方法是擁有一個@State變量,它告訴 SwiftUI 是否應顯示警報。

然后Button操作會將其設置為true ,從而使body無效,並觸發視圖重建。

struct ContentView : View {

    @State var showAlert = false

    var body: some View {
        NavigationView {
            List(0...10) { value in
                Text(verbatim: "\(value)")
            }
            .navigationBarItems(leading: EmptyView(), trailing: Button(action: {
                self.showAlert = true
            }) {
                Text(verbatim: "Show alert")
            })
            .navigationBarTitle(Text(verbatim: "A List"))
        }
        .presentation($showAlert) {
            return Alert(title: Text(verbatim: "An Alert"))
        }
    }

}

在此示例中,按鈕將@State設置為 true,並在導航視圖上調用presentation

結果:

在此處輸入圖片說明

要顯示帶有兩個按鈕的警報,您可以執行以下操作:

@State var showAlert = false

let alert = Alert(title: Text("Title"), message: Text("Alert message"),
  primaryButton: Alert.Button.default(Text("OK"), 
    onTrigger: {
      print("OK button tapped")
    }
  ), 
  secondaryButton: Alert.Button.cancel()
)

var body: some View {

  NavigationView {
    Text("Content")
      .navigationBarItems(trailing: Button(action: {
        self.showAlert = true
      }, label: {
        Text("Show Alert")
      }).presentation(self.$showAlert, alert: {
        return alert
      })
    )
  }
}

結果:

在此處輸入圖片說明

上面的答案已被棄用。 改用這個:

@State var showsAlert = false

var body: some View {
    NavigationView {
        List {
            Text("Item 1")
            Text("Item 2")
            Text("Item 3")
        }
        .navigationBarTitle("My List", displayMode: .inline)
        .navigationBarItems(trailing:
            Button(action: {
                self.showsAlert = true
            }, label: {
                Text("Show Alert")
            }).alert(isPresented: self.$showsAlert) {
                Alert(title: Text("Hello World"))
            }
        )
    }
}

請注意使用.alert而不是.presentation

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM