Swiftui 使用标记/选择或isActive的NavigationView编程导航

Swiftui 使用标记/选择或isActive的NavigationView编程导航,swiftui,Swiftui,NavigationLink有一个初始值设定项,该初始值设定项应该是一个隐藏的NavigationLink,当selection==标记时,该初始值设定项将激活。类似于导航链接(目的地:isActive:label:) 现在我想知道,我可以用它在一个模型中拥有一个属性,可以用来在页面之间任意跳转吗?Aka,支持NavigationView的程序化导航 大概是这样的: 导入快捷界面 枚举导航步骤{ 案例步骤1 案例步骤2 } 类NavModel:ObservableObject{ @已发布的var

NavigationLink
有一个初始值设定项,该初始值设定项应该是一个隐藏的NavigationLink,当selection==标记时,该初始值设定项将激活。类似于
导航链接(目的地:isActive:label:)

现在我想知道,我可以用它在一个模型中拥有一个属性,可以用来在页面之间任意跳转吗?Aka,支持NavigationView的程序化导航

大概是这样的:

导入快捷界面
枚举导航步骤{
案例步骤1
案例步骤2
}
类NavModel:ObservableObject{
@已发布的var步骤:导航步骤?=.步骤1
}
结构页1视图:视图{
@环境对象变量navModel:navModel
var body:一些观点{
VStack(间距:20){
//当model.step设置为.step2时,Page1->Page2中的隐藏链接处于活动状态
NavigationLink(目标:Page2View(),标记:NavStep.step2,选择:$navModel.step){
EmptyView()
}
正文(“第1页”)
按钮(“转到第2页”){
self.navModel.step=.step2
}
}
.navigationBarTitle(“第1页”)
}
}
结构Page2View:视图{
@环境对象变量navModel:navModel
var body:一些观点{
VStack(间距:20){
正文(“第2页”)
按钮(“转到第1页”){
self.navModel.step=.step1
}
}
.navigationBarTitle(“第2页”)
}
}
struct programmaticnavigatione示例:视图{
var body:一些观点{
导航视图{
Page1View()
}
.environmentObject(NavModel())
}
}
struct ProgrammaticNavigationExample_预览:PreviewProvider{
静态var预览:一些视图{
ProgrammaticNavigationExample()
}
}
很好,它适用于两个页面,您可以通过设置step属性以编程方式导航。 但是,现在我想知道,这怎么能扩展到另一页,第三页呢

当我天真地尝试这样做时,设置'model.step=.step3'会中断第一页中的导航链接,我们回到第1页。即使我使用两个可以相应设置的布尔属性“enteredStep2”/“enteredStep3”对此进行建模,当试图通过设置这些属性返回时,它也会变得不稳定


您知道如何使用此API(或以其他方式)启用编程导航吗?或者了解为什么NavigationView/NavigationLink的行为与示例中的一样?

目前似乎无法使用此API在多个步骤上构建程序化导航(有关更多信息,请参阅)

您只能使用
NavigationLink(目的地:,标记:,选择:,标签:)
以编程方式决定下一步要显示的视图,如:

struct ProgrammaticNavigationExampleView:View{
枚举导航目的地{
壳红
果岭
}
@状态变量目的地:导航目的地?
var body:一些观点{
VStack(间距:20){
导航链接(目标:Color.red,标记:NavDestination.red,选择:$destination){
EmptyView()
}
导航链接(目标:Color.green,标记:NavDestination.green,选择:$destination){
EmptyView()
}
正文(“第1页”)
按钮(“显示随机页面”){
self.destination=[.red、.green].randomElement()!
}
}
.navigationBarTitle(“第1页”)
}
}
struct ProgrammaticNavigationExample_预览:PreviewProvider{
静态var预览:一些视图{
导航视图{
ProgrammaticNavigationExampleView()
}
}
}

对不起,这是相关的,但没有回答我在这里提出的问题。在提出这个问题之前,我花了3个小时研究和阅读了多篇关于这个主题的文章,并尝试了不同的方法。请不要欺骗我。简而言之,
NavigationLink
只在一个步骤/级别上持续存在,就像
NavigationView
有一些当前的状态,所以所有标记/isActive只对一个转换有效。在下一次停止时,所有先前的导航链接将替换为当前激活的导航链接(无论以何种交互方式或编程方式)。在SwiftUI可用一年多的时间里,许多帖子都描述了这种行为;对不起,到目前为止,我还没有看到一篇文章明确说明这一点。也许我不是为了树木而去看森林。