我有一个名为Diem的SwiftData模型,变量分别为idnamedate.我想从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
        }
    }
}

和DiemDetail

struct DiemDetail: View {
    var diem: Diem

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

Diem型的都很好.我在DiemDetail和HomeView上确实有.sheet分,但我不认为这是问题所在.

推荐答案

首先,HomeViewDiemDetail上都有重复的NavigationStack.DiemDetail还可以从其母公司HomeView进行导航.除非移除它,否则它不会工作,因为第一次推到DiemDetail时,导航将被嵌套的导航替换,后者不再处理.navigationDestination.

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

把这些东西结合起来:

struct DiemGridItem: View {
    var diem: Diem
    
    var body: some View {
        NavigationLink(value: diem.id) {
            Text(diem.id.uuidString)
        }
    }
}

struct DiemDetail: View {
    var diem: Diem

    var body: some View {
        VStack {
            ...
        }
        .toolbar {
            ...
        }
    }
}

Swift相关问答推荐

Swift Tree实现中的弱var

在swift静态var扩展中,如何或可以访问和返回具体类?

如何将CodingKeys作为数组而不是枚举传递到类外部的函数中?

格式化单位和度量值.为什么从符号初始化的单位不能产生与静态初始化相同的结果

在visionOS 1.0中已弃用';base Color';:请改用`Color`属性

MacOS 13-如何使用SwiftUI创建Message.App设置工具栏?

与视图交互使工具栏&;标题消失

使用 @resultBuilder 的通用 buildList 函数

根据其属性组合 2 个模型以在 Swift 中创建另一个模型

SwiftUI:列表背景为空列表时为黑色

TabView 无法在屏幕上正确显示

为 ObservedObject 和 State 对象配置预览

响应 UITextField (UIViewRepresentable) 中的特定按键

如何更改 Picker 的边框 colored颜色

用于 Swift 编码的 iOS 应用程序的 Ffmpeg

理解 Swift 2.2 Select 器语法 - #selector()

如何在 Swift 中将 UILabel 居中?

如何轻松删除领域中的所有对象

<<错误类型>> 奇怪的错误

如何将应用程序与 iOS 联系人应用程序集成?