swiftui - 如何从导航堆栈中弹出多个视图?
问题描述
寻找一些关于在 SwiftUI 中从导航堆栈中弹出多个视图的简单方法的指导。我有 4 个使用 NavigationLink 链接在一起的视图。在最后一个视图中,我想跳回最初的 ContentView,将所有其他视图从堆栈中弹出。我不想使用每个视图的 NavigationBar 上的“返回”按钮来实现这一点。
提前致谢。鲍勃。'''
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
VStack {
NavigationLink(destination: BView()) {
Text("This is View A, now go to View B.")
}
}
}
}
}
struct BView: View {
var body: some View {
NavigationLink(destination: CView()) {
Text("This is View B, now go to View C.")
}
}
}
struct CView: View {
var body: some View {
NavigationLink(destination: DView()) {
Text("This is View C, now go to View D.")
}
}
}
struct DView: View {
var body: some View {
// The following line adds ContentView onto the existing navigation stack. Instead, I want to pop the previous views off the stack, leaving me back at ContentView.
NavigationLink(destination: ContentView()) {
Text("This is View D, now jump back to View A.")
}
}
}
'''
解决方案
它并不是真正从堆栈中“弹出”视图,但您SceneDelegate
可以将其设置rootViewController
为您想要的任何视图(参见 default 的第 28 行SceneDelegate.swift
)。在你的情况下,你希望它ContentView
再次出现。
例如,在您SceneDelegate
添加如下内容:
func toContentView() {
let contentView = ContentView()
window?.rootViewController = UIHostingController(rootView: contentView)
}
然后在 中DView
,将 更改为NavigationLink
刚刚执行的 a Button
:
(UIApplication.shared.connectedScenes.first?.delegate as? SceneDelegate)?.toContentView()
如果您有多个场景,则需要更多。
推荐阅读
- firebase - 使用 Google Chrome 的“网络条件”选项卡时,Firebase 托管为 Googlebot 用户代理返回 500 内部错误?
- jpa - javax.ejb.EJBException:事务中止
- sql - SQL:从 2 个表中选择不匹配的记录
- java - 尝试从 RESTful API 获取 JSON 对象时,Volley 没有连接错误
- matlab - 在 Matlab 中查找时间戳之间的相交
- maven - Gradle 构建解析 Maven2 快照的方式与 Maven 构建不同
- angular - 当我使用减号运算符时,错误数据透视表同步融合 ej2-angular - 错误语法错误:后缀操作中的左侧表达式无效
- repository - 谷歌云存储库不显示降价文件中的图像
- amcharts4 - AmCharts DateAxis 显示非常错误的值
- javascript - 如何对“MediaStream”中视频轨道尺寸/大小的变化做出反应?