SwiftUI:从工作表导航到新视图

sim*_*bac 6 swiftui

如何从工作表中将新视图推送到导航堆栈上。我想显示课程列表。当点击其中一门课程时,应该会打开一张表格,显示有关该课程的详细信息。从工作表中,人们应该能够在新的全屏视图中开始课程。

import SwiftUI

struct ContentView: View {
    var lessons = [Lesson(id:"1"), Lesson(id:"2"), Lesson(id:"3"), Lesson(id:"4"), Lesson(id:"5"), Lesson(id:"6"), Lesson(id:"7"), Lesson(id:"8"), Lesson(id:"9")]

    var body: some View {
        NavigationView(){
            Form{
                List(lessons){ lesson in
                    LessonButton(lesson: lesson)
                }
            }
        }
    }
}

struct LessonButton:View{
    @State var showSheet = false
    var lesson:Lesson

    var body: some View {
        Button(action:{self.showSheet = true}){
            Text(lesson.name)
        }.sheet(isPresented:$showSheet){
            NavigationLink(destination: Text("reached")){
                Text("start")
            }
        }
    }
}


struct Lesson: Identifiable{
    var id:String
    var name: String{
        "Lesson \(self.id)"
    }
}

Run Code Online (Sandbox Code Playgroud)

但是,NavigationLink 不起作用。我想,这是因为工作表不是内容视图的子视图。这可能就是它不起作用的原因。但怎样才能实现呢?

Asp*_*eri 1

Sheet是模态视图模式,可以进入并返回。

实际上我不明白为什么在描述的场景中需要一张纸。正如您所描述的,这是预期的:

列表 -> 详细信息 -> 课程,

因此,请使用两个导航链接,一个在“列表”中,一个在“详细信息”中。这是 Apple 为 NavigationView/NavigationLink 使用而设计的 - 从一个视图到另一个视图的导航。