如何在用户点击 SwiftUI 中的列表行时显示警报
How to show an alert when the user taps on the List row in SwiftUI
当用户点击 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:>
寻找更好的解决方案或避免此警告的解决方案。
您的代码为每个项目创建一个单独的警报。将 alert
调用移到 ForEach
之外,然后只会创建一个警报实例。
这是由于单个变量在更新时为所有单元格呈现,所以您可以尝试
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")))
}
}
}
当用户点击 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:>
寻找更好的解决方案或避免此警告的解决方案。
您的代码为每个项目创建一个单独的警报。将 alert
调用移到 ForEach
之外,然后只会创建一个警报实例。
这是由于单个变量在更新时为所有单元格呈现,所以您可以尝试
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")))
}
}
}