SwiftUI - NavigationLink(值:)和 navigationDestination 不起作用

问题描述 投票:0回答:1

我有一个名为

Diem
的 SwiftData 模型,其中包含变量
id
name
date
。我想从 HomeView 导航到 DiemDetail,但 NavigationLink 不起作用。 Xcode 显示没有错误。

struct HomeView: View {
    @Query(sort: \Diem.date) 
    private var diems: [Diem]
    
    var body: some View {
        NavigationStack {
            DiemsGrid()
                .navigationDestination(for: Diem.ID.self) { diemID in
                    if let diem = diems.first(where: { $0.id == diemID }) {
                        DiemDetail(diem: diem)
                    }
                }
        }
    }
}
struct DiemsGrid: View {
    @Query(sort: \Diem.date) var diems: [Diem]

    var body: some View {
        ScrollView(.vertical) {
            LazyVGrid(columns: layout, spacing: 0) {
                ForEach(diems) { diem in
                    DiemGridItem(diem: diem)
                }
            }
        }
    }
}
struct DiemGridItem: View {
    var diem: Diem
    
    var body: some View {
        NavigationLink(value: diem.id) {
            // View code
        }
    }
}

还有迪姆细节

struct DiemDetail: View {
    var diem: Diem

    var body: some View {
        NavigationStack {
            VStack() {
                // views
            }
            .toolbar {
                // views
            }
        }
    }
}

Diem
模型都很好。我确实在 DiemDetail 和 HomeView 中有一个
.sheet
,但我不认为这就是问题所在。

swift swiftui swiftui-navigationlink swift-data ios17
1个回答
0
投票

首先,您在

NavigationStack
HomeView
上都有重复的
DiemDetail
。 DiemDetail 还具有来自其父级 HomeView 的导航。除非你删除它,否则它将不起作用,因为你第一次推送到
DiemDetail
时,导航将被替换为嵌套导航,它不再处理
.navigationDestination

其次,

NavigationLink
中的
DiemGridItem
采用正确的类型,该类型与来自其祖先的
.navigationDestination
进行映射。但是,您没有提供其外观,这就是为什么您没有看到任何可点击的链接。

struct DiemGridItem: View {
    var diem: Diem
    
    var body: some View {
        NavigationLink(value: diem.id) {
            Text(diem.id.uuidString)
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.