我的UIAlertController在每次调用警报时都会不断添加新按钮,从而导致无限按钮

时间:2015-05-18 17:52:36

标签: ios swift alert uialertcontroller

我正在添加警报以防止用户覆盖以前使用过的数据,我正在使用UIAlertController,如同在其他帖子中推荐的那样。涉及的代码如下所示:

var alert:UIAlertController = UIAlertController(title: "Are you sure?", message: "This will overwrite your information", preferredStyle: UIAlertControllerStyle.Alert)

func showAlert() {

    alert.addAction(UIAlertAction(title: "Overwrite", style: .Default, handler: { (action:UIAlertAction!) -> Void in

    }))

    alert.addAction(UIAlertAction(title: "Nevermind", style: .Default, handler: { (action: UIAlertAction!) -> Void in

    }))

    presentViewController(alert, animated: true, completion: nil)

}

@IBAction func buttonPressed(sender: AnyObject) {
    showAlert()
}

第一次出现时,这是正常的。第二次将显示四个按钮:

覆盖,没关系,覆盖,没关系。

第三次显示SIX按钮:

覆盖,没关系,覆盖,没关系,覆盖,没关系。

等等,永远。造成这种情况的原因是什么?如何防止它?

1 个答案:

答案 0 :(得分:2)

您有一个变量alert,您可以在代码中的某个位置实例化它。 在你的函数showAlert()中添加动作(Overwrite,Nevermind),每次调用该函数时都会这样做。

alert中移动showAlert的实例化,或者仅在您实例化alert的位置添加一次操作。

func showAlert() {
    let alert:UIAlertController = UIAlertController(title: "Are you sure?", message: "This will overwrite your information", preferredStyle: UIAlertControllerStyle.Alert)

    alert.addAction(UIAlertAction(title: "Overwrite", style: .Default, handler: { (action:UIAlertAction!) -> Void in

    }))

    alert.addAction(UIAlertAction(title: "Nevermind", style: .Default, handler: { (action: UIAlertAction!) -> Void in

    }))

    presentViewController(alert, animated: true, completion: nil)

}