如何在收到警报答案后执行segue

时间:2017-09-22 10:15:48

标签: ios iphone swift segue alert

今天我想尝试创建一个应用程序的一部分,在显示警报后,如果用户按下“是”警报按钮,则仅执行一个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)}
}

谢谢你的帮助

1 个答案:

答案 0 :(得分:1)

您的代码存在一些问题:

  1. 您的代码的任何部分都没有调用@IBAction方法,这就是为什么没有执行segue的原因。警报控制器仅为您提供完成处理程序;没有像UIButton那样的目标/行动机制。

  2. 布尔返回值在操作的完成处理程序异步中确定。在用户有机会选择之前,您的函数会立即返回值false。事情按此顺序发生:

    1. 致电提醒()
    2. 功能提供UIAlertController
    3. 函数返回false
    4. (通过很多毫秒)
    5. 用户点击"是"
    6. 执行完成处理程序并将x设置为true,但alert()方法已返回false
  3. 在添加每个动作后,您将呈现两次警报。您需要添加两个操作,然后只显示一次。

  4. 在代码中使用标准大写字母。

  5. 尝试这样的事情:

    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)
        }
    })