如何向用户显示警报?
Posted
技术标签:
【中文标题】如何向用户显示警报?【英文标题】:How to present alert to User? 【发布时间】:2019-06-08 13:19:17 【问题描述】:我想问你如何向用户显示警报。 我刚试过:
.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")
))
但它告诉我它没有被使用并且警报没有出现......
【问题讨论】:
How to present an Alert with swiftUI的可能重复 【参考方案1】:您需要在应显示警报的视图顶部调用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
。
结果:
【讨论】:
你知道如何添加TextField而不是Alert的消息吗? @DavidKadlcek 我不认为你可以 - 你可能必须实现自己的自定义警报【参考方案2】:要显示带有两个按钮的警报,您可以执行以下操作:
@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
)
)
结果:
【讨论】:
【参考方案3】:以上答案已被弃用。改用这个:
@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
。
【讨论】:
以上是关于如何向用户显示警报?的主要内容,如果未能解决你的问题,请参考以下文章