ios - 当用户点击 SwiftUI 中的列表行时如何显示警报

标签 ios swift alert swiftui swiftui-list

当用户在 SwiftUI 中点击列表中的行时,显示包含该行数据的警报的最佳方式是什么?

我正在使用此代码。

import SwiftUI

struct ContentView: View {

    var testData = ["One","Two","Three"]

    var body: some View {

        List{
            ForEach(testData, id: \.self) { item in
                Text(item).onTapGesture {

                    if item == "One" {

                        print("One selected")

                        print("NEED TO SHOW THE ALERT HERE")

                    }

                }
            }

        }

    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

我试图通过这种方式解决问题:
import SwiftUI

struct ContentView: View {

    @State private var showingAlert = false

    var testData = ["One","Two","Three"]

    var body: some View {

        List{
            ForEach(testData, id: \.self) { item in

                Button(action: {
                    self.showingAlert = true

                }) {
                    Text("\(item)")

                }
                .alert(isPresented: self.$showingAlert) {
                    Alert(title: Text("Text"), message: Text(item), dismissButton: .default(Text("Ok")))

                }

            }

        }

    }

}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

但是这个解决方案会导致这个警告:
Attempt to present <UIAlertController:>  which is already presenting <UIAlertController:>

寻找更好的解决方案或避免此警告的解决方案。

最佳答案

这是由于更新时为所有单元格呈现单个变量,因此您可以尝试

struct ContentView: View {

    @State private var showingAlert = false

    @State private var item = "" // track last clicked item

    var testData = ["One","Two","Three"]

    var body: some View {

        List{
            ForEach(testData, id: \.self) { item in

                Button(action: {
                    self.item = item
                    self.showingAlert = true

                }) {
                    Text("\(item)")

                }

            }

        }.alert(isPresented: self.$showingAlert) {
                Alert(title: Text("Text"), message:Text(item), dismissButton: .default(Text("Ok")))
        }

    }

}

关于ios - 当用户点击 SwiftUI 中的列表行时如何显示警报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59235879/

相关文章:

iphone - 防止在 iPhone 上加载 HTML5 视频

ios - 标签栏项目未显示在 Storyboard 中

ios - 推送通知不起作用(仅在 Debug模式下有效)

ios - 为登录用户触发 Segue

ios - 以编程方式关闭 iphone 低电量警报

javascript - 使 javascript 警告/确认对话框更加可见(尤其是在 Google Chrome 浏览器中)

android - 评分栏像代号一的android

ios - Swift 中的 XLForm 验证

ios - ios 如何退出谷歌账户?

ios - 将整数发送回前一个 View Controller