在我的shouldPerformSegue
中,我检查是否输入了所有玩家的名字。如果没有,我会询问用户是否要继续。
override func shouldPerformSegue(withIdentifier identifier: String, sender: Any?) -> Bool {
// Check filled in players
// var shouldPerform = true
if (newPlayerCount < playerCount && newPlayerCount >= minPlayerCount) {
let alert = UIAlertController(title: "Lege velden", message: "Je hebt een veld leeg gelaten. Weet je zeker dat je met (newPlayerCount) spelers wilt spelen?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ja", style: .default, handler: { action in
//shouldPerform = true
return true
}))
alert.addAction(UIAlertAction(title: "Nee", style: .destructive, handler: { action in
self.markUnusedFields()
//shouldPerform = false
return false
}))
self.present(alert, animated: true)
}
//return shouldPerform
}
return
不起作用,因为处理程序没有期望它。如何从处理程序返回主函数?我也不能生成我在处理程序中设置的变量(比如在注释中(,因为它会立即返回。
提前感谢!
shouldPerformSegue(withIdentifier:sender:)
是弹出警报进行确认的正确位置。相反,您的控件应该连接到弹出确认的操作,然后您的操作可以调用performSegue(withIdentifier:sender:)
。
在代码中,函数shouldPerformSegue
显示警报,然后立即返回。然后在shouldPerformSegue
已经完成之后执行警报动作。
我会尝试在用户按下"继续"按钮时显示警报,而不是试图评估segue是否应该发生。
@IBAction func touchedContinueButton(_ sender: UIButton) {
// Check filled in players
if (newPlayerCount < playerCount && newPlayerCount >= minPlayerCount) {
let alert = UIAlertController(title: "Lege velden", message: "Je hebt een veld leeg gelaten. Weet je zeker dat je met (newPlayerCount) spelers wilt spelen?", preferredStyle: .alert)
alert.addAction(UIAlertAction(title: "Ja", style: .default, handler: { action in
// The player chose to continue
// Send them to the next view using the segue with identifier "mySegue"
self.performSegue(withIdentifier: "mySegue", sender: self)
}))
alert.addAction(UIAlertAction(title: "Nee", style: .destructive, handler: { action in
self.markUnusedFields()
}))
self.present(alert, animated: true)
}
}
如果您使用这种方法,请不要忘记将segue的序列图像板标识符设置为与performSegue(withIdentifier:)
中的字符串相匹配