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

My UIAlertController keeps adding new buttons each time the alert is called, causing endless buttons

我正在添加警报以防止用户覆盖以前使用的数据,并且我正在使用另一个 post 中推荐的 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()
}

第一次出现会正常。第二次会显示四个按钮:

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

第三次会显示六个按钮:

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

以此类推,永远。是什么原因造成的,我该如何预防?

您有一个变量 alert,您在代码中的某处对其进行了实例化。 在您的函数 showAlert() 中添加操作(覆盖、没关系),并且每次调用该函数时都执行此操作。

要么将 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)

}