SwiftUI 导航到 NavigationView 堆栈的底部

2024-02-12

我进行了以下设置,其中父视图包含NavigationView它显示一系列页面 A、B 和 C。在页面 C 上有一个隐藏导航视图的按钮。我想要它,以便当再次显示导航视图时,它会自动导航到页面 A,但是我不确定如何使用 SwiftUI 执行此操作,如何实现?

struct ParentView: View {
    @State var showNavigation:Bool = true
    var body: some View {
        ZStack {
            Button(action: {
                self.showNavigation = true
            }) {
                Text("Show navigation")
            }
            NavigationView {
                NavigationLink(destination: ChildA(showNavigation: $showNavigation)) {
                    Text("Go to A")
                }
            }.opacity(showNavigation ? 1.0 : 0.0)
        }
    }
}

struct ChildA: View {
    @Binding var showNavigation:Bool

    var body: some View {
        VStack {
            Text("A")
            NavigationLink(destination: ChildB(showNavigation: $showNavigation)) {
                           Text("Go to B")
                       }
        }
    }
}

struct ChildB: View {
    @Binding var showNavigation:Bool

    var body: some View {
        VStack {
            Text("B")
            NavigationLink(destination: ChildC(showNavigation: $showNavigation)) {
                           Text("Go to C")
                       }
        }
    }
}

struct ChildC: View {
    @Binding var showNavigation:Bool

    var body: some View {
        VStack {
            Text("C")
            Button(action: {
                self.showNavigation = false
            }) {
                Text("Hide Navigation")
            }
        }
    }
}

这里的设置并不复杂。一件事是对于任何中间视图,您必须设置.isDetailLink(false)。否则,它们将在倒带过程中保留。

struct ParentView: View {
    @State var showNavigation:Bool = true
    @State var isActive:Bool = true

    var body: some View {
        ZStack {
            Button(action: {
                self.showNavigation = true
            }) {
            Text("Show navigation")
        }
        NavigationView {
            NavigationLink.init(
                destination: ChildA(showNavigation: $showNavigation, isActive: $isActive), 
                isActive: $isActive) {
                    Text("Go to A")
                }
            }.opacity(showNavigation ? 1.0 : 0.0)
        }
    }
}

struct ChildA: View {
    @Binding var showNavigation:Bool
    @Binding var isActive:Bool
    @State var isNextActive:Bool = false
    var body: some View {
        VStack {
            Text("A")
            NavigationLink(
                destination: ChildB(showNavigation: $showNavigation, isActive: $isNextActive), 
                isActive: $isNextActive) {
                     Text("Go to B")
                }.isDetailLink(false)
            }.onReceive(Just(isNextActive)) { isNextActive in
                if isNextActive == false && (!self.showNavigation) {

                    self.isActive = false
                }
            }
        }
    }
}

struct ChildB: View {
    @Binding var showNavigation:Bool
    @Binding var isActive:Bool
    @State var isNextActive:Bool = false

    var body: some View {
        VStack {
            Text("B")
            NavigationLink(destination: ChildC(showNavigation: $showNavigation, isActive: $isNextActive), isActive: $isNextActive) {
                Text("Go to C")
            }.isDetailLink(false)
        }.onReceive(Just(isNextActive)) { isNextActive in
            if isNextActive == false && (!self.showNavigation) {
                DispatchQueue.main.async {
                    self.isActive = false
                }
            }
        }             
    }
}

struct ChildC: View {
    @Binding var showNavigation:Bool
    @Binding var isActive:Bool
    var body: some View {
        VStack {
            Text("C")
            Button(action: {
                self.showNavigation = false
                self.isActive = false
            }) {
                Text("Hide Navigation")
            }
        }
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

SwiftUI 导航到 NavigationView 堆栈的底部 的相关文章

随机推荐

  • 对所有列实施 NGX 数据表过滤

    我一直试图让它工作但没有运气 我一直在参考这些资源来寻求帮助 http swimlane github io ngx datatable filter http swimlane github io ngx datatable filter
  • 通过电子邮件和 PHP 进行电子邮件验证?

    我在一些网站上看到 用户可以简单地向类似的网站发送一封空白电子邮件 电子邮件受保护 cdn cgi l email protection如果他们在获取验证电子邮件时遇到问题 请验证他们的电子邮件 我有一个使用 PHP MySQL 的网站 我
  • iOS:以 caf 以外的其他格式录制音频

    我正在从事录音工作 我可以在 caf 中录制音频 核心音频格式 现在我想录制声音 mp3 or amr 我尝试了很多谷歌但没有找到任何东西 我不确定我的以下步骤是否有效 编写该音频 caf文档目录的扩展名 从该文件读取数据 再次写入文件 m
  • Laravel:从多对多关系中进行条件选择

    我的帖子和主题有多对多的 Laravel 关系 帖子属于许多主题 主题属于许多帖子 我想获得帖子编号 gt 10 from 某个话题 以下代码将获取特定主题的所有帖子 topic Topic where id topic id gt get
  • 为什么没有 $(window).height();返回一个值,但是 $(document).height();做?

    我正在尝试使用 jQuery 来获取当前窗口高度 我打算用这个值设置一个变量 并在调整大小时更新该值 由于某种原因 window height 总是返回零 但是 document height 返回一个值 为什么会这样呢 为了简洁起见 代码
  • 按特定列选择不同的实体

    我有一个包含 4 列的表 id column a 和column b 我最初的查询基本上是 Session session initialize my hibernate session Criteria criteria session
  • Indy TIdTCPClient 接收文本

    我尝试在 idtcpclient 中接收文本 但它不起作用 这是我在计时器中使用的代码 procedure TForm1 Timer2Timer Sender TObject var receivedtext string begin if
  • Magento:从没有产品的属性集中获取属性

    我在 Magento 商店中设置了一个属性集 其中有几个二进制属性 对于下拉列表 我需要此属性集中所有属性的列表 包括它们的内部名称和标签 由于此下拉列表应该出现在不一定选择产品的地方 因此我不能走 获取产品属性 的通常路线 我如何获取集合
  • 如何设置 Job DSL 创建的多分支作业的发现模式

    我是詹金斯的新手 我正在尝试解决一些问题 有没有办法通过 Groovy 添加分支源行为 这是使用 Jenkins 分析 SonarQube 中的 GitHub 项目 I m creating a multi branch pipeline
  • elasticsearch 是非确定性的吗?

    由于elasticsearch计算分数的算法 每次执行查询时是否不会以相同的顺序返回相同的结果 或者是别的什么 有没有办法让每次执行查询时结果都以相同的顺序返回 这是正常的吗 这可能与 elasticsearch 默认在本地计算相关性分数的
  • 如何使 DockPanel 中的项目扩展以适应 WPF 中的所有可用空间?

    我有一个StackPanel含有一个StackPanel和其他一些物品 首先StackPanel具有垂直方向 内部具有水平方向 里面有一个TreeView and a ListView 我希望它们能够扩展并适应窗口的宽度 这是我通过窗口设置
  • 使用 TimeTCPClient 从公共时间服务器获取时间

    我尝试使用以下代码从公共时间服务器获取时间 package aaa import java util Arrays import java util List import org apache commons net TimeTCPCli
  • list.files 的性能问题

    我正在尝试使用以下命令从 3 个网络驱动器检索文件list files这需要永远 当我使用时find在 shell 中 它会在不到 15 秒的时间内返回所有结果 system time jnk lt list files c Volumes
  • Expo 安全存储在玩笑测试中不可用

    这个问题具体是关于expo secure store and jest 目前 我在登录时使用 expo secure store 来存储我的 JWT 它在模拟器上运行时工作正常 但是在 Jest 测试中根本不起作用 令牌返回为undefin
  • C# 通用复制构造函数

    我有一个接口和两个实现该接口的类 这些类具有泛型类型 我想从一个类的实例克隆到另一个类的实例 interface IFoo stuff class Foo
  • Intellij IDEA 11:如何从 .less 编译 .css?

    如何在 intellij 中从 less 编译 css 当然这应该很容易 但它让我难住了 有人知道怎么做吗 我写了一个当 LESS 文件发生变化时 它会自动将它们编译为 CSS 您可以配置多个 LESS 目录来监视每个项目 每个目录的输出将
  • 如何将 _locale 参数添加到安全路径?

    我设置了安全设置来保护根路径下的所有内容 除了查看隐私政策的公共页面外 privacy 一切正常 security yml access control path privacy role IS AUTHENTICATED ANONYMOU
  • 设置 PEP 代理

    我一直在研究 PEP Proxy Steelskin 以便我可以为我的 Orion Context 提供一些安全层 但是 有一些问题阻碍了我的进展 我想使用 IDM 和 Keystone 全局实例 我已按照相应的指示成功安装了 pepPro
  • PHP GD imagecreatefromjpeg 无法处理大尺寸图像?

    我的项目是当我自动上传图像时我的程序将创建拇指大小 如果图片大小约为 1024x768 我的程序可以正常工作 但是当我上传大小为 1576x2379 的图片时 显示如下错误 允许的内存大小 8388608 字节已耗尽 尝试分配 1576 字
  • SwiftUI 导航到 NavigationView 堆栈的底部

    我进行了以下设置 其中父视图包含NavigationView它显示一系列页面 A B 和 C 在页面 C 上有一个隐藏导航视图的按钮 我想要它 以便当再次显示导航视图时 它会自动导航到页面 A 但是我不确定如何使用 SwiftUI 执行此操