SwiftUI 导航回上层但不是根视图

Posted

技术标签:

【中文标题】SwiftUI 导航回上层但不是根视图【英文标题】:SwiftUI navigate back to upper but not root view 【发布时间】:2021-03-19 23:23:35 【问题描述】:

我有四个这样的页面:

第 1 页 第 2 页 第 3 页 第 4 页

我根据状态布尔值在页面之间导航。我希望通过单击第 4 页上的按钮从第 4 页导航回第 2 页。

这就是我所拥有的:

import SwiftUI

struct Page1View: View 
    @State var gotoPage2 = false
    
    var body: some View 
        NavigationView 
            Button("Goto Page 2") 
                gotoPage2 = true
            
            .navigationTitle("Page 1")
            .background(
                NavigationLink(
                    destination: Page2View(),
                    isActive: $gotoPage2,
                    label: EmptyView()
                )
            )
        
    


struct Page2View: View 
    @State var gotoPage3 = false
    
    var body: some View 
        Button("Goto Page 3") 
            gotoPage3 = true
        
        .navigationTitle("Page 2")
        .background(
            NavigationLink(
                destination: Page3View(
                    gotoPage3: $gotoPage3
                ),
                isActive: $gotoPage3,
                label: EmptyView()
            )
        )
    


struct Page3View: View 
    @State var gotoPage4 = false
    @Binding var gotoPage3: Bool
    
    var body: some View 
        Button("Goto Page 4") 
            gotoPage4 = true
        
        .navigationTitle("Page 3")
        .background(
            NavigationLink(
                destination: Page4View(
                    gotoPage3: $gotoPage3
                ),
                isActive: $gotoPage4,
                label: EmptyView()
            )
        )
    


struct Page4View: View 
    @Binding var gotoPage3: Bool
    
    var body: some View 
        Button("Go Back to Page 2") 
            gotoPage3 = false
        
            .navigationTitle("Page 4")
    

预期行为 当点击“返回第 2 页”时,NavigationView 会导航回第 2 页

实际行为 什么都没发生

观察 如果第 2 页是根视图,则此代码按预期工作。但是,我需要导航到不是根视图的页面

【问题讨论】:

【参考方案1】:

添加到 Page3View .isDetailLink(false) 中的 NavigationLink - 这应该会有所帮助。

struct Page3View: View 
    
    @State var gotoPage4 = false
    @Binding var gotoPage3: Bool
    
    var body: some View 
        Button("Goto Page 4") 
            gotoPage4 = true
        
        .navigationTitle("Page 3")
        .background(
            NavigationLink(
                destination: Page4View(gotoPage3: $gotoPage3),
                isActive: $gotoPage4,
                label:  EmptyView() 
            )
            .isDetailLink(false)
        )
    
    

【讨论】:

以上是关于SwiftUI 导航回上层但不是根视图的主要内容,如果未能解决你的问题,请参考以下文章

更新 SwiftUI 导航栏标题

如何在 SwiftUI 中使用按钮导航回一个视图

导航回视图时更新 SwiftUI 选择器最小值和最大值

SwiftUI中NavigationLink多层嵌套导航无法返回上一层的原因及解决

SwiftUI中NavigationLink多层嵌套导航无法返回上一层的原因及解决

UINavigationController - 检测何时导航回根视图控制器