Segue 在 if / else 子句中过早执行
Segue performing prematurely in if / else clause
以下代码
class ViewController: UIViewController {
@IBOutlet weak var knock: UIButton!
@IBOutlet weak var label: UILabel!
var count: Int = 0
var unlocked: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func knockKnock(sender: UIButton) {
if count < 20 {
label.text = "Knocked \(count) times."
} else if count > 19 && count < 40 {
label.text = "Knocked \(count) times."
label.textColor = UIColor.randomColor()
} else if count > 39 && count < 100 {
label.text = "That's enough."
label.textColor = UIColor.blackColor()
} else if count > 99 && count < 102 {
label.text = "I wish you hadn't done that."
label.textColor = UIColor.redColor()
} else if count == 103 {
label.text = "Fine, come in."
label.textColor = UIColor.greenColor()
count = 126
unlocked += 1
}
if unlocked > 0 {
self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
}
count += 1
}
在
中过早地执行了 Segue
if unlocked > 0 {
self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
}
第一次按下按钮时会立即执行 segue,我不明白,因为此时代码在错误的 if
语句后面应该无法访问,因为 int unlocked
用 0
初始化
我遇到过类似的问题,结果证明是 XCode 本身的问题,而不是我的代码;我查看了所有我能找到的引用 Interface Builder 中的任何变量或对象的文件,检查了命名不一致、流氓出口等。
我对 Segues 的理解仍然很不稳定,如果有人能提供任何详细的帮助,我将不胜感激。
较大的 if
/ else if
块在添加 Segue 代码之前一直正常工作到最终增量。
最初 self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
行在 else if count == 103 {
块内;添加 var unlocked: Int
以解决 Segue 问题无济于事。
我已经通读了几页关于 Segues 的 XCode 文档,但还没有找到我可以尝试的其他内容。
我可能忽略了一些非常明显的事情,但无论如何,感谢阅读。
干杯
编辑: 我已经检查了所有出口,它是目前项目中唯一的 Segue,并且没有连接到其他任何地方。 Segue 在按下按钮时激活,而不是在视图加载时立即激活。
就像我的评论所说的那样,您已经将 segue 与您的按钮连接起来,因此 segue 将始终执行。它与 if
子句无关。
您应该使用 ViewController 连接,而不是使用按钮连接
你必须用一个 segue 连接你的两个 ViewController,给它一个标识符。然后,您可以通过这种方式触发segue。
self.performSegueWithIdentifier("segue_name_identifier", sender: self)
在这里你可以轻松地设置你的 segue。
希望对您有所帮助。
以下代码
class ViewController: UIViewController {
@IBOutlet weak var knock: UIButton!
@IBOutlet weak var label: UILabel!
var count: Int = 0
var unlocked: Int = 0
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
@IBAction func knockKnock(sender: UIButton) {
if count < 20 {
label.text = "Knocked \(count) times."
} else if count > 19 && count < 40 {
label.text = "Knocked \(count) times."
label.textColor = UIColor.randomColor()
} else if count > 39 && count < 100 {
label.text = "That's enough."
label.textColor = UIColor.blackColor()
} else if count > 99 && count < 102 {
label.text = "I wish you hadn't done that."
label.textColor = UIColor.redColor()
} else if count == 103 {
label.text = "Fine, come in."
label.textColor = UIColor.greenColor()
count = 126
unlocked += 1
}
if unlocked > 0 {
self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
}
count += 1
}
在
中过早地执行了 Segue if unlocked > 0 {
self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
}
第一次按下按钮时会立即执行 segue,我不明白,因为此时代码在错误的 if
语句后面应该无法访问,因为 int unlocked
用 0
我遇到过类似的问题,结果证明是 XCode 本身的问题,而不是我的代码;我查看了所有我能找到的引用 Interface Builder 中的任何变量或对象的文件,检查了命名不一致、流氓出口等。
我对 Segues 的理解仍然很不稳定,如果有人能提供任何详细的帮助,我将不胜感激。
较大的 if
/ else if
块在添加 Segue 代码之前一直正常工作到最终增量。
最初 self.performSegueWithIdentifier("InsideHomeSegue", sender:sender)
行在 else if count == 103 {
块内;添加 var unlocked: Int
以解决 Segue 问题无济于事。
我已经通读了几页关于 Segues 的 XCode 文档,但还没有找到我可以尝试的其他内容。
我可能忽略了一些非常明显的事情,但无论如何,感谢阅读。
干杯
编辑: 我已经检查了所有出口,它是目前项目中唯一的 Segue,并且没有连接到其他任何地方。 Segue 在按下按钮时激活,而不是在视图加载时立即激活。
就像我的评论所说的那样,您已经将 segue 与您的按钮连接起来,因此 segue 将始终执行。它与 if
子句无关。
您应该使用 ViewController 连接,而不是使用按钮连接
你必须用一个 segue 连接你的两个 ViewController,给它一个标识符。然后,您可以通过这种方式触发segue。
self.performSegueWithIdentifier("segue_name_identifier", sender: self)
在这里你可以轻松地设置你的 segue。
希望对您有所帮助。