我想问你如何向用户显示警报。 我刚刚尝试过:
.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")
}))
但是它告诉我它没有被使用并且没有出现警报...
答案 0 :(得分:3)
您需要在应显示警报的视图顶部调用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
。
结果:
答案 1 :(得分:1)
答案 2 :(得分:0)
以上答案已被弃用。改用它:
@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
。