Swiftui 快捷界面:从图纸导航到新视图

Swiftui 快捷界面:从图纸导航到新视图,swiftui,Swiftui,如何从图纸中推送导航堆栈上的新视图。我想显示课程列表。在其中一个课程上使用Tab键时,应打开一张显示课程详细信息的工作表。从工作表中,您应该能够在新的全屏视图中开始本课程 导入快捷界面 结构ContentView:View{ var课程=[课程(id:“1”)、课程(id:“2”)、课程(id:“3”)、课程(id:“4”)、课程(id:“5”)、课程(id:“6”)、课程(id:“7”)、课程(id:“8”)、课程(id:“9”)] var body:一些观点{ 导航视图(){ 形式{ 列出(

如何从图纸中推送导航堆栈上的新视图。我想显示课程列表。在其中一个课程上使用Tab键时,应打开一张显示课程详细信息的工作表。从工作表中,您应该能够在新的全屏视图中开始本课程

导入快捷界面
结构ContentView:View{
var课程=[课程(id:“1”)、课程(id:“2”)、课程(id:“3”)、课程(id:“4”)、课程(id:“5”)、课程(id:“6”)、课程(id:“7”)、课程(id:“8”)、课程(id:“9”)]
var body:一些观点{
导航视图(){
形式{
列出(课程){中的课程
lesson巴顿(第一课:第一课)
}
}
}
}
}
结构LessonButton:视图{
@状态变量showSheet=false
var课程:课程
var body:一些观点{
按钮(操作:{self.showSheet=true}){
课文(课程名称)
}.sheet(显示:$showSheet){
导航链接(目的地:文本(“已到达”)){
文本(“开始”)
}
}
}
}
结构课程:可识别{
变量id:String
变量名称:String{
“课程\(self.id)”
}
}

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

工作表是模态视图模式,您可以进入它并从中返回

事实上,我不明白为什么在描述的场景中需要一张工作表。正如您所描述的,预计:

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


因此,使用两个导航链接,一个在列表中,一个在细节中。这是Apple针对NavigationView/NavigationLink使用的原生设计—从一个视图到另一个视图的导航。

有点晚了,但在解决这个问题时出现了这个问题。图纸的行为类似于其自己的视图控制器堆栈。您不能在图纸覆盖中导航父对象,也不应该。看起来你是在问我在寻找什么,那就是模仿其他苹果应用程序在工作表中导航。您只需在工作表中添加一个
NavigationView
。这将为您提供一个导航堆栈,用于将其他图纸样式的视图推送到第一张图纸中的导航控制器

(SwiftUI初学者,措辞可能是错误的)


在应用商店的
Today
选项卡中,您会为每篇文章弹出一个类似的工作表,并且可以使用NavigationLink打开每个演示的应用。但是我明白你的意思。图纸不会从调用它的视图继承导航视图。您需要使用按钮来完成此操作,或者更改逻辑以转到另一个视图,而不是Asperi建议的图纸。
import SwiftUI

struct NavigateFromSheet: 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){
            NavigationView {
                VStack {
                    Text("My First Sheet")
                    NavigationLink(destination: Text("reached")){
                        Text("My Second Sheet")
                    }
                }
            }
            
        }
    }
}


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

struct NavigateFromSheet_Previews: PreviewProvider {
    static var previews: some View {
        NavigateFromSheet()
    }
}