在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
相关产品推荐
相关产品推荐

