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

SwiftUI技术问询:点击Alert的Proceed按钮跳转至ContentView2

当然可行!这在SwiftUI里完全可以实现,我来帮你调整代码达成需求

首先先纠正几个小问题,再一步步实现导航功能:

核心修改点

  • 你的@State var alertIsShown没有初始化,需要给它默认值false
  • 要实现Alert触发导航,我们需要一个额外的状态变量来控制NavigationLink的激活状态
  • 把Alert的修饰符移到外层(比如NavigationView上),避免每个List行都重复创建Alert实例

修改后的完整代码

struct ContentView: View {
    // 初始化弹窗状态为false
    @State var alertIsShown = false
    // 新增状态变量,控制是否跳转到第二个页面
    @State var shouldNavigate = false
    // 新增变量记录选中的颜色(为后续传递数据做准备)
    @State var selectedColor: String?
    
    var myArray = ["Blue","Red","Pink","Yellow"]
    
    var body: some View {
        NavigationView{
            List(0..<myArray.count) { i in
                Button(action: {
                    print("Button tapped")
                    // 记录当前选中的颜色
                    selectedColor = myArray[i]
                    alertIsShown = true
                }) {
                    Text(myArray[i])
                }
            }
            // 把Alert修饰符移到NavigationView上,全局生效
            .alert(isPresented: $alertIsShown) {
                Alert(title: Text("You have chosen"),
                      message: Text("Are you sure you want to go to contentview2?"),
                      primaryButton: .destructive(Text("Proceed!")) {
                    print("Proceeding...")
                    // 触发导航,同时关闭弹窗
                    shouldNavigate = true
                    alertIsShown = false
                },
                      secondaryButton: .cancel())
            }
            // 添加NavigationLink,通过isActive控制跳转
            .background(
                NavigationLink(
                    destination: ContentView2(selectedColor: selectedColor ?? ""),
                    isActive: $shouldNavigate,
                    label: { EmptyView() }
                )
            )
        }
    }
}

struct ContentView2 : View {
    // 接收从ContentView传递过来的颜色
    var selectedColor: String
    
    var body: some View {
        Text("I'm the \(selectedColor) view")
    }
}

代码解释

  1. 状态变量管理:用shouldNavigate这个布尔值来控制NavigationLink的激活状态,当用户点击Alert的「Proceed」按钮时,我们把它设为true,触发跳转。
  2. Alert的正确位置:把.alert修饰符加在List上(或者NavigationView),这样整个页面只会有一个Alert实例,避免重复创建的问题。
  3. 数据传递(可选):我额外添加了selectedColor变量,用来把用户选中的颜色传递给ContentView2,刚好能满足你后续要显示对应颜色文本的需求。
  4. 隐藏NavigationLink:用EmptyView()作为NavigationLink的标签,并放在background里,这样用户看不到这个链接,只会通过Alert的操作触发跳转。

这样修改后,用户点击列表项弹出Alert,再点击「Proceed!」就会直接跳转到ContentView2,同时还能带上选中的颜色信息~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 08:37:41