如何向用户显示警报?

时间:2019-06-08 13:19:17

标签: ios swift swiftui

我想问你如何向用户显示警报。 我刚刚尝试过:

.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")
}))

但是它告诉我它没有被使用并且没有出现警报...

3 个答案:

答案 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

结果:

enter image description here

答案 1 :(得分:1)

要使用两个按钮显示警报,您可以执行以下操作:

transform

结果:

enter image description here

答案 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