You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何通过Button的action实现点击跳转至第二个页面

SwiftUI 实现Button Action触发页面跳转方案

你可以通过状态变量驱动导航链路激活的方式,实现自定义Button点击触发跳转的效果,和直接使用NavigationLink的跳转逻辑完全一致,同时支持在跳转前插入自定义业务逻辑。


方案1:兼容iOS 13+ 通用写法(NavigationView)

通过@State声明布尔类型的跳转控制标记,将标记绑定到NavigationLink的isActive参数,把NavigationLink设为隐藏,在Button的action闭包里修改标记值即可触发跳转:

struct FirstPage: View {
    // 跳转控制状态
    @State private var isPushToSecond = false
    
    var body: some View {
        NavigationView {
            VStack {
                Button("点击跳转第二页") {
                    // 这里可以加跳转前的自定义逻辑:校验、埋点、参数处理等
                    isPushToSecond = true
                }
                
                // 绑定状态的隐藏导航链接
                NavigationLink(
                    destination: SecondPage(),
                    isActive: $isPushToSecond
                ) { EmptyView() }
                .hidden()
            }
            .navigationTitle("首页")
        }
    }
}

struct SecondPage: View {
    var body: some View {
        Text("这是第二个页面")
            .navigationTitle("第二页")
    }
}

方案2:iOS 16+ 新API写法(NavigationStack)

如果项目最低支持iOS 16及以上系统,可以直接用NavigationStack搭配navigationDestination修饰符,不需要额外写隐藏的NavigationLink,写法更简洁:

struct FirstPage: View {
    @State private var isPushToSecond = false
    
    var body: some View {
        NavigationStack {
            Button("点击跳转第二页") {
                // 跳转前自定义逻辑
                isPushToSecond = true
            }
            .navigationTitle("首页")
            .navigationDestination(isPresented: $isPushToSecond) {
                SecondPage()
            }
        }
    }
}

struct SecondPage: View {
    var body: some View {
        Text("这是第二个页面")
            .navigationTitle("第二页")
    }
}

补充说明

  • 如果需要传值跳转,可以把布尔类型的控制状态替换为对应业务数据类型的可选值,当可选值被赋值为非nil时会自动触发跳转,页面销毁后状态会自动置为nil,不需要手动重置。
  • 这种写法的跳转效果和直接点击NavigationLink完全一致,支持系统自带的返回手势、导航栏返回按钮,没有自定义转场的兼容问题。

内容的提问来源于stack exchange,提问作者leosoft

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 12:27:26