gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:57:28 25 4
gpt4 key购买 nike

当用户在 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com