【发布时间】:2018-05-18 08:53:42
【问题描述】:
我有一个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,但这似乎是错误的做法!
我尝试过的事情是将锻炼定义为ifelse if 部分中的变量,但最终的锻炼超出了segue 的范围。
希望这是有道理的,我能找到的关于条件转场的答案似乎主要是指“只允许转场在这种情况下发生”,而不是将不同的数据集传递到同一个目的地。例如example1 和 example2
【问题讨论】:
-
我认为您知道点击按钮时用户选择了哪种锻炼方式?如果是这样,只需在点击按钮时将此锻炼存储在一个属性中,然后在执行 segue 时访问它,将其传递给目标视图控制器
-
我只是快速浏览了一下,一些建议 - 当您询问一个非常通用的概念时,您的问题有很多特定于上下文的细节。我认为您可以将您的问题的长度和复杂度缩短四分之一。
-
感谢@Peza,我会确保我以后这样做
标签: ios swift segue swift4 uistoryboardsegue