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

在Xcode16/iOS18中如何通过Button跳转至ResultsView?

在Xcode16/iOS18中用Button跳转至ResultsView的实现方法

当然可以通过Button来呈现ResultsView。在SwiftUI(尤其是Xcode16/iOS18版本)中,直接在Button的action闭包里创建视图实例不会触发导航,你需要结合NavigationStack的导航目标机制来实现。以下是具体修改方案:

步骤1:添加导航状态变量

在ContentView中添加一个@State变量,用于控制ResultsView的展示状态:

struct ContentView: View {
    @Bindable var rData = ResonantData()
    @Bindable var dData = DesiredData()
    // 新增:控制导航的状态变量
    @State private var showResultsView = false
    
    // ... 其余代码保持不变
}

步骤2:配置导航目标

给NavigationStack添加navigationDestination修饰符,指定当状态变量为true时展示ResultsView,同时传递计算所需的数据:

NavigationStack {
    // ... 你的原有视图内容
}
// 新增:导航目标配置
.navigationDestination(isPresented: $showResultsView) {
    ResultsView(resonantData: rData, desiredData: dData)
}

步骤3:修改Button的Action逻辑

将Button的action改为切换状态变量,触发导航:

Button("Results View") {
    showResultsView = true
}

步骤4:更新ResultsView接收数据并实现计算

修改ResultsView,接收传递过来的数据并添加计算逻辑(示例):

import SwiftUI

struct ResultsView: View {
    // 接收ContentView传递的数据
    let resonantData: ResonantData
    let desiredData: DesiredData
    
    // 计算结果(根据你的需求自定义逻辑)
    private var calculationResult: String {
        guard let resonantFreq = Double(resonantData.frequency),
              let desiredFreq = Double(desiredData.frequency) else {
            return "请输入有效的频率数值"
        }
        let frequencyDifference = desiredFreq - resonantFreq
        return "当前谐振频率:\(resonantFreq) MHz\n目标谐振频率:\(desiredFreq) MHz\n频率差值:\(frequencyDifference) MHz"
    }
    
    var body: some View {
        ZStack {
            Color.black.ignoresSafeArea()
            VStack(spacing: 20) {
                Text("计算结果")
                    .font(.system(size: 30))
                    .foregroundColor(.white)
                    .fontWeight(.bold)
                
                Text(calculationResult)
                    .font(.system(size: 18))
                    .foregroundColor(.white)
                    .multilineTextAlignment(.center)
                    .padding(.horizontal)
            }
        }
    }
}

#Preview {
    ResultsView(resonantData: ResonantData(), desiredData: DesiredData())
}

补充:确保数据模型的正确性

你的ResonantData和DesiredData需要遵循ObservableObject协议,才能配合@Bindable正常工作,示例定义如下:

import SwiftUI

class ResonantData: ObservableObject {
    @Published var frequency = ""
}

class DesiredData: ObservableObject {
    @Published var frequency = ""
}

为什么原有代码无效?

直接在Button的action中创建ResultsView()只是生成了一个视图实例,但没有将其加入到SwiftUI的视图层级中,因此不会被渲染展示。必须通过导航系统(如navigationDestination)或弹窗机制(如sheet)来管理视图的展示状态。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 04:02:27