SwiftUI связывает каждую ячейку с новым представлением

Я новичок в SwiftUI, я хочу знать, как я могу связать свой список, если кто-то переключит cardView на новое представление SwiftUI, например, как я делал это с раскадровкой и tableView для каждой ячейки, которую я переключаю

struct ScrollViewCont: View {
   
    var body: some View {

        ScrollView(.horizontal){

            HStack{

                ForEach(tabs) { sections in
                    GeometryReader { geometry in
                        ScrollViewTabs(
                            tabText: sections.name,
                            tabImage: sections.thumbnail
                        )
                        .rotation3DEffect(Angle(degrees: (Double(geometry.frame(in: .global).minX) - 210) / -20), axis: (x: 0, y: 1.0, z: 0))
                    }
                    .frame(width: 200, height: 250)
                    .padding()
                }         
            }
        }
    }
}

56
1

Ответ:

Решено

Вот пример кода, который позволяет представить различные ScrollViewTabs, затем при нажатии «перейти к» другому представлению.

struct ContentView: View {
    var tabs = [
        TabSection(name: "الحروف العربية", thumbnail: "folder", SubView: "test"),
        TabSection(name: "الحروف الانجليزية", thumbnail: "person", SubView: "test2"),
        TabSection(name: "الحروف الانجليزية", thumbnail: "globe", SubView: "test2"),
        TabSection(name: "الحروف الانجليزية", thumbnail: "info", SubView: "test2"),
        TabSection(name: "الحروف الانجليزية", thumbnail: "house", SubView: "test2")
    ]
    
    @State private var selections: [TabSection] = []
    
    var body: some View {
        NavigationStack(path: $selections) {
            ScrollView(.horizontal){
                HStack{
                    ForEach(tabs) { section in
                        GeometryReader { geometry in
                            ScrollViewTabs(tab: section).border(.green)
                                .rotation3DEffect(Angle(degrees: (Double(geometry.frame(in: .global).minX) - 210) / -20), axis: (x: 0, y: 0, z: 1.0))
                                .onTapGesture {
                                    selections = [section]
                                }
                            
                        }.frame(width: 200, height: 250).padding()
                    }
                }
            }
            .navigationDestination(for: TabSection.self) { tab in
                OtherView(tab: tab)
            }
        }
    }
}

// for testing
struct OtherView: View {
    var tab: TabSection
    
    var body: some View {
        Text("OtherView " + tab.name)
    }
}

// for testing
struct ScrollViewTabs: View {
    @State var tab: TabSection
    
    var body: some View {
        Label(tab.name, systemImage: tab.thumbnail)
    }
}

struct TabSection: Identifiable, Hashable {
    let id = UUID()
    var name: String
    var thumbnail: String
    var SubView: String
}