gpt4 book ai didi

ios - 根据按下的按钮,通过 Segue 传递变量返回的对象

转载 作者:行者123 更新时间:2023-11-28 11:58:56 24 4
gpt4 key购买 nike

我有一个 WorkoutGenerator 结构,它根据不同的参数返回不同的锻炼,例如 generateWorkout.standardWorkout 返回不同于 generateWorkout.hardWorkout 的内容.

我在“锻炼设置”页面上有 3 个按钮,每个按钮用于将不同类型的锻炼传递到“锻炼页面”(还有一个“锻炼时间”输入字段)。

我目前有一个 segue goToWorkout 从“锻炼设置页面”到“锻炼页面”

我想做的是触发 segue 到锻炼页面,根据用户按下的按钮传递不同的锻炼。

到目前为止我有:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
//currently have one segue between the pages
if segue.identifier == "goToWorkout" {

let finalTimeForWorkout = Int(timeInputField.text!)
//set a standardWorkout to pass to Workout Page
let finalWorkout = FinalWorkout(generatedWorkout: WorkoutGenerator.standardWorkout.generate(), timeForWorkout: finalTimeForWorkout!)

//set the final parameters ready to pass
let finalWorkoutTime = finalWorkout.timeForWorkout
let finalWorkoutExercises = finalWorkout.generatedWorkout.workoutExercises

if let destVC = segue.destination as? WorkoutController {
destVC.selectedWorkoutExerciseArray = finalWorkoutExercises
destVC.selectedWorkoutTime = finalWorkoutTime

}
}
}

and then something like this for each button :

//use this button to pass a standard workout
//want to pass a diff workout if a diff button pressed
@IBAction func standardWorkoutPressed(_ sender: UIButton) {
performSegue(withIdentifier: "goToWorkout", sender: self )
}

我玩了几个小时后遇到的问题是如何优雅地将不同的锻炼传递到锻炼页面。

即我想我可以从字面上复制并粘贴每个按钮的所有代码并为每个按钮创建一个新的 segue,但这似乎是错误的方法!

我尝试过的事情是将训练定义为 if else if 部分中的变量,但最终训练超出了 segue 的范围。

希望这是有道理的,我能找到的关于条件转场的答案似乎主要是指“只允许转场在这种情况下发生”,而不是将不同的数据集传递到同一目的地。例如example1example2

最佳答案

我会将我的评论添加为答案,以便更轻松地展示一些代码示例。

向您的 View Controller 添加一个属性:

var selectedWorkout : FinalWorkout!

在三个按钮操作方法中的每一个中,您都将此属性设置为与每个按钮关联的锻炼。所以对于你的标准锻炼:

@IBAction func standardWorkoutPressed(_ sender: UIButton) {
let finalTimeForWorkout = Int(timeInputField.text!)

self.selectedWorkout = FinalWorkout(generatedWorkout: WorkoutGenerator.standardWorkout.generate(), timeForWorkout: finalTimeForWorkout!)
performSegue(withIdentifier: "goToWorkout", sender: self )
}

最后:

override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "goToWorkout" {
let finalWorkoutTime = selectedWorkout.timeForWorkout
let finalWorkoutExercises = selectedWorkout.generatedWorkout.workoutExercises
if let destVC = segue.destination as? WorkoutController {
destVC.selectedWorkoutExerciseArray = finalWorkoutExercises
destVC.selectedWorkoutTime = finalWorkoutTime
}
}
}

关于ios - 根据按下的按钮,通过 Segue 传递变量返回的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50407419/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com