如何为 ForEach 中的每张卡片添加导航链接,以便它们有自己的屏幕可以访问?

Posted

技术标签:

【中文标题】如何为 ForEach 中的每张卡片添加导航链接,以便它们有自己的屏幕可以访问?【英文标题】:How do I add a navigation link for each one of the cards in the ForEach so that they have there own screen to go to? 【发布时间】:2021-08-08 06:17:13 【问题描述】:

我已经准备好视图的结构,但我不知道如何让卡片转到该视图。我很新!有人可以帮忙吗?

我的代码:

struct HomeView: View 
        var SolarCards: [String] = ["MercuryCard", "VenusCard", "EarthCard", "MarsCard", "jupiterCard", "saturnCard", "uranusCard", "neptuneCard"]
ScrollView(.horizontal, showsIndicators: false) 
                HStack(spacing: 20) 
                    ForEach(SolarCards, id: \.self)  cards in
                        GeometryReader  geometry in
                             Image(cards)
                            .shadow(color: colorScheme == .dark ? .blue : .purple, radius: 10)
                            .padding(.bottom, 0)
                            .padding(.leading, 10)
                            .rotation3DEffect(Angle(degrees: Double(geometry.frame(in: .global).minX) / -20), axis: (x: 0, y: 10.0, z: 0))
                        
                    
                    .frame(width: 260, height: 400)
                
            

【问题讨论】:

这可能会有所帮助:hackingwithswift.com/quick-start/swiftui/… 我已经为相应的卡片准备了不同的文件,并且这些文件中的结构非常大,那么我该如何链接呢?您发送的视频刚刚显示了文字。 【参考方案1】:

您可以将AnyView 与模型一起使用,并为每个元素设置视图。

这里是演示代码

struct DemoView: View 
    
    var cards: [Cards] = [.init(name: "MercuryCard", view: AnyView(MercuryCard())),
                          .init(name: "VenusCard", view: AnyView(VenusCard())),
                          .init(name: "EarthCard", view: AnyView(EarthCard()))]
    
    var body: some View 
        NavigationView 
            ScrollView(.horizontal, showsIndicators: false) 
                HStack(spacing: 20) 
                    ForEach(cards, id: \.id)  cards in
                        NavigationLink(destination: cards.view) 
                            Text(cards.name)
                        
                    
                    .frame(width: 260, height: 400)
                
            
        
    


struct Cards: Identifiable 
    var id = UUID()
    var name: String
    var view: AnyView


struct MercuryCard: View 
    var body: some View 
        Text("MercuryCard")
    


struct VenusCard: View 
    var body: some View 
        Text("VenusCard")
    


struct EarthCard: View 
    var body: some View 
        Text("EarthCard")
    


【讨论】:

哦,这行得通!非常感谢您的帮助。我不知道 AnyView 是什么,但现在我知道了。再次感谢!

以上是关于如何为 ForEach 中的每张卡片添加导航链接,以便它们有自己的屏幕可以访问?的主要内容,如果未能解决你的问题,请参考以下文章

如何为我的数据创建交叉引用表/查询?

如何为类的每个实例创建实例特定的方法?

如何为数据库中的foreach数据添加索引?

具有每个图像反射的 iCarousel

如何为我在回收站视图中的卡片视图中的每个项目创建一个点击监听器

将EventListener 添加到innerHTML