今天我想尝试创建一个应用程序的一部分,在显示警报后,如果用户按下“是”警报按钮,则仅执行一个segue。 为了更好地解释我,我希望应用程序会显示过敏,说“你确定要回家吗?”它将有两个Botton:“是”和“否”。如果用户按下没有任何反应,如果用户按是,则应用程序执行segue。问题是我不知道该怎么做。
我尝试编写一些代码行,但它不起作用。
func Alert (TITLE: String, MESSAGE: String) -> Bool()
{
var X = false
let Alert = UIAlertController(title: TITLE, message: MESSAGE, preferredStyle: UIAlertControllerStyle.alert)
Alert.addAction(UIAlertAction(title: "Yes", style: UIAlertActionStyle.default, handler: { (Action) in
X = true
Alert.dismiss(animated: true, completion: nil)
}))
self.present(Alert, animated: true, completion: nil)
Alert.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.default, handler: nil))
self.present(Alert, animated: true, completion: nil)
return X
}
@IBAction func ButtonAct(_ sender: Any) //This happen if you click the botton on the screen of the iPhone
{
if Alert (TITLE: "Return to Home", MESSAGE: "Are you sure to return Home?")
{performSegue(withIdentifier: "Segue", sender: self)}
}
谢谢你的帮助
答案 0 :(得分:1)
您的代码存在一些问题:
您的代码的任何部分都没有调用@IBAction
方法,这就是为什么没有执行segue的原因。警报控制器仅为您提供完成处理程序;没有像UIButton
那样的目标/行动机制。
布尔返回值在操作的完成处理程序异步中确定。在用户有机会选择之前,您的函数会立即返回值false
。事情按此顺序发生:
false
x
设置为true,但alert()
方法已返回false
。在添加每个动作后,您将呈现两次警报。您需要添加两个操作,然后只显示一次。
请在代码中使用标准大写字母。
尝试这样的事情:
func alert (title: String, message: String, completion: ((Bool) -> Void)) {
let alertController = UIAlertController(title: title, message: message, preferredStyle: UIAlertControllerStyle.alert)
alertController.addAction(UIAlertAction(title: "Yes", style: .default, handler: { (action) in
alertController.dismiss(animated: true, completion: nil)
completion(true) // true signals "YES"
}))
alertController.addAction(UIAlertAction(title: "No", style: UIAlertActionStyle.default, handler: { (action) in
alertController.dismiss(animated: true, completion: nil)
completion(false) // false singals "NO"
}))
self.present(alertController, animated: true, completion: nil)
}
......并且这样称呼它:
alert(title: "Hi", message: "Want to proceed?", completion: { result in
if result {
self.performSegue(withIdentifier: "Segue", sender: self)
}
})