首页 > 解决方案 > ForEach 循环的多个工作表

问题描述

我需要你的帮助,因为我不知道如何在我的 ForEach 循环中显示多张工作表。每次单击我的 ForEach 项目之一时,我都想展示我的 DetailView()。我相信 NavigationLink 可能会有所帮助,但我想坚持使用工作表。请帮助我解决我的问题。提前致谢。

import Foundation
import SwiftUI

struct DataArray: Identifiable {
    let id: Int
    let cities: String
    let name1: String
    let name2: String
    
    let isBookMark: Bool
    let isFavorite: Bool
}

public struct ListDataArray {
    static let dot = [
    DataArray(id: 1,
        cities: "Baltimore"
        name1: "John",
        name2: "Mike",
        isBookMark: False,
        isFavorite: False),
        
    DataArray(id: 2,
        cities: "Frederick"),
        name1: "Joe",
        name2: "Swift",
        isBookMark: False,
        isFavorite: False),
        
    DataArray(id: 3,
        cities: "Catonsville"
        name1: "Susan",
        name2: "Oliver",
        isBookMark: False,
        isFavorite: False),
        
    // There will be a lot of data     
    ]
}

class Prospect: ObservableObject {
    @Published var datas: [DataArray] = ListDataArray.dot

}

struct Home: View {
    @EnvironmentObject var items: Prospect
    
    var body: some View {
        List {
            ForEach(items.datas) { data in
                Button {
                    //Action
                } label: {
                    LazyHStack {
                        Text("\(data.id)")
                            .font(.title3)
                        Text(data.cities)
                            .font(.subheadline)
                    }
                    .padding()
                }
                .sheet(item: ) {
                    // Action for onDismiss
                } content: { model in
                    DetailView(data: model)
                }
                
            }
            .padding()
        }
    }
}

struct DetailView: View {
    
    let data: DataArray
    
    var body: some View {
        VStack(spacing: 10) {
            
            Text(data.cities)
            Text(data.name1)
            Text(data.name2)
            
        }
        .font(.body)
    }
}

struct Home_Previews: PreviewProvider {
    static var previews: some View {
        Home()
            .environmentObject(Prospect())
    }
}

标签: swiftui

解决方案


您可以使用@State变量来跟踪已选择的项目并将其传递给.sheet参数item

struct Home: View {
    @EnvironmentObject var items: Prospect
    
    @State private var sheetItem : DataArray?
    
    var body: some View {
        List {
            ForEach(items.datas) { data in
                Button {
                    sheetItem = data
                } label: {
                    LazyHStack {
                        Text("\(data.id)")
                            .font(.title3)
                        Text(data.cities)
                            .font(.subheadline)
                    }
                    .padding()
                }
                
            }
            .padding()
        }
        .sheet(item: $sheetItem) {
            // Action for onDismiss
        } content: { model in
            DetailView(data: model)
        }
    }
}

推荐阅读