我意识到使用基本逻辑我不能将覆盖函数放入 if else 语句中,因为它会覆盖所有内容。但是我仍然需要在 if else 语句中为 segue 做准备。所以我工作的代码的工作方式是,如果用户点击一个按钮两次,他们就赢得了比赛,因此转到显示分数的获胜者 View Controller 。如果他们输了,他们会转到没有分数的 View Controller 。所以我需要将覆盖函数 segue 放在 updateTimer()
中, 在 else if counter < 9.9 && level == 2
部分。
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
let DestViewController : winViewController = segue.destination as! winViewController
DestViewController.LebelText = labelx.text!
}
func updateTimer() {
counter += 0.1
labelx.text = String(format: "%.1f", counter)
if counter > 10 && level < 2 {
let next = self.storyboard?.instantiateViewController(withIdentifier: "loseViewController") as? loseViewController
self.present(next!, animated: true, completion: nil)
} else if counter < 9.9 && level == 2 {
let nextc = self.storyboard?.instantiateViewController(withIdentifier: "winViewController") as? winViewController
self.present(nextc!, animated: true, completion: nil)
} else {
return
}
}
最佳答案
为了建立上面 Jon 的评论,你甚至不应该调用 present(UIViewController:)
- 它甚至不会调用 prepare(for segue:)
方法。听起来您想要做的是在特定时间检查条件,并根据该条件传递一些数据以呈现在目标 View Controller 中。
如果你想使用转场,最好的办法是设置一个转场标识符:
首先,您需要创建转场。将鼠标悬停在 Storyboard 中 VC 顶部的 View Controller 图标上,然后按住 control 并拖动到目标 VC:
然后选择segue的类型
之后,您需要为 segue 设置一个唯一标识符,以便您可以区分代码中的任何其他 segue。为此,请选择 segue 本身,然后转到检查器 Pane 并在“标识符”字段中键入一个唯一名称:
在你为你想要的两个 segues 完成之后,你可以将你的代码编辑成这样:
func updateTimer() {
counter += 0.1
labelx.text = String(format: "%.1f", counter)
if counter > 10 && level < 2 {
// Use first unique segue identifier
self.performSegue(withIdentifier: "identityA", sender: self)
} else if counter < 9.9 && level == 2 {
// Use second unique identifier
self.performSegue(withIdentifier: "identityB", sender: self)
}
}
现在您可以在 prepare(for segue:)
中添加特殊代码,并且您可以使用您在 Interface Builder 中指定的唯一标识符来区分并为不同的目标 VC 添加特殊代码
override func prepare(for segue: UIStoryboardSegue, sender: Any?) {
if segue.identifier == "identityA" {
let destinationA: winViewController = segue.destination as! winViewController
destinationA.LebelText = labelx.text
} else if segue.identifier == "identityB" {
let destinationB: loseViewController = segue.destination as! loseViewController
destinationB.LebelText = labelx.text
}
}
关于ios - 如何在 if else 语句中插入覆盖函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41527170/