如何向用户显示警报?

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

【讨论】:

以上是关于如何向用户显示警报?的主要内容,如果未能解决你的问题,请参考以下文章

当用户未登录用户尝试访问私有路由时,向所有私有路由显示警报

如何在swift 5中的完成块内向用户显示警报

向权限模式警报添加描述

当用户使用角度选中或取消选中复选框时,向用户显示警报消息

如何向推送通知警报视图添加操作?

如何使用 c# 在 asp.net 中隐藏和显示警报