[英]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.