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

SwiftUI如何在Alert选择Yes后导航至其他页面?

SwiftUI实现Alert确认后导航到其他页面

SwiftUI完全支持这个需求,核心是通过状态变量中转Alert的确认动作和导航触发逻辑,以下是针对不同iOS版本的可行实现方案:

iOS 16+ 推荐写法(NavigationStack)

使用navigationDestination配合状态变量,这是当前SwiftUI导航的标准实现方式:

import SwiftUI

struct ContentView: View {
    @State private var showAlert = false
    @State private var shouldNavigate = false
    
    var body: some View {
        NavigationStack {
            Button("跳转前确认") {
                showAlert = true
            }
            .alert("确认跳转?", isPresented: $showAlert) {
                Button("No", role: .cancel) {}
                Button("Yes") {
                    shouldNavigate = true
                }
            }
            .navigationDestination(isPresented: $shouldNavigate) {
                TargetView()
            }
            .navigationTitle("主页")
        }
    }
}

struct TargetView: View {
    var body: some View {
        Text("目标页面")
            .navigationTitle("详情页")
    }
}

iOS 15及以下兼容写法(NavigationView)

如果需要适配旧版本系统,可使用NavigationLink的isActive绑定状态:

import SwiftUI

struct ContentView: View {
    @State private var showAlert = false
    @State private var shouldNavigate = false
    
    var body: some View {
        NavigationView {
            Button("跳转前确认") {
                showAlert = true
            }
            // 隐藏的NavigationLink,通过状态控制导航
            NavigationLink(destination: TargetView(), isActive: $shouldNavigate) {
                EmptyView()
            }
            .alert("确认跳转?", isPresented: $showAlert) {
                Button("No", role: .cancel) {}
                Button("Yes") {
                    shouldNavigate = true
                }
            }
            .navigationTitle("主页")
        }
    }
}

struct TargetView: View {
    var body: some View {
        Text("目标页面")
            .navigationTitle("详情页")
    }
}

关键逻辑说明

  • 通过showAlert状态控制弹窗显示,点击按钮触发弹窗
  • 弹窗的"Yes"按钮修改shouldNavigate状态,触发导航逻辑
  • 避免直接在Alert按钮中调用导航方法,必须通过状态变量中转,这是SwiftUI响应式框架的核心要求

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 10:10:08