NavigationStack中从视图A直接跳转至视图C的实现方法问询
当然可行,NavigationStack本身支持直接跳转到任意层级的目标视图,无需经过中间视图B。以下是两种常用的实现方案:
方案一:使用NavigationPath(推荐用于复杂导航场景)
通过绑定NavigationPath对象,可以灵活控制导航栈的内容,直接将目标视图的标识推入栈中实现跳转:
import SwiftUI struct AView: View { // 定义导航路径状态 @State private var navigationPath = NavigationPath() var body: some View { NavigationStack(path: $navigationPath) { VStack(spacing: 20) { // 跳转至B视图 Button("跳转到B") { navigationPath.append("B") } // 直接跳转至C视图 Button("跳转到C") { navigationPath.append("C") } } .navigationDestination(for: String.self) { destination in if destination == "B" { BView() } else if destination == "C" { CView() } } } } } struct BView: View { var body: some View { Text("这是视图B") .navigationTitle("视图B") } } struct CView: View { var body: some View { Text("这是视图C") .navigationTitle("视图C") } }
方案二:直接绑定触发状态(适合简单导航场景)
通过定义布尔类型的状态变量,控制对应视图的展示:
import SwiftUI struct AView: View { @State private var showB = false @State private var showC = false var body: some View { NavigationStack { VStack(spacing: 20) { Button("跳转到B") { showB = true } Button("跳转到C") { showC = true } } .navigationDestination(isPresented: $showB) { BView() } .navigationDestination(isPresented: $showC) { CView() } } } } // BView和CView定义同方案一
两种方案都能实现从A直接跳转至C的需求,你可以根据自己的导航复杂度选择合适的方式。
内容的提问来源于stack exchange,提问作者xlubmon
相关产品推荐
相关产品推荐

