为什么UIAlertView的代表不起作用?

时间:2017-07-04 07:58:18

标签: ios swift

当我使用我的班级AlertView来显示UIAlertView时,我将委托设置为此类对象并期望alertView:clickedButtonAt运行,但是当我点击{{1它不起作用。为什么?谢谢!

UIAlertView

2 个答案:

答案 0 :(得分:3)

您将UIAlertView实例声明为局部变量,这样,它没有引用。使它成为一个全局变量,因此委托方法可以正确执行。

答案 1 :(得分:2)

我认为它与内存管理问题有关。 createAccountErrorAlert已被声明为show()方法的局部变量,这导致变量的生命周期依赖于执行方法的生命周期。

解决方案是将createAccountErrorAlert声明为实例变量,如下所示:

class AlertView : UIViewController,UIAlertViewDelegate{
    var done : ((_ buttonIndex: Int)->Void)?
    var createAccountErrorAlert: UIAlertView = UIAlertView()

    func show(){
        createAccountErrorAlert.delegate = self

        createAccountErrorAlert.title = "Oops"
        createAccountErrorAlert.message = "Could not create account!"
        createAccountErrorAlert.addButton(withTitle: "Dismiss")
        createAccountErrorAlert.addButton(withTitle: "Retry")

        createAccountErrorAlert.show()

    }
    func alertView(_ alertView: UIAlertView, clickedButtonAt buttonIndex: Int){
        print("Why delegate of alert view does not work?")
    }
}

备注 :我强烈建议您使用UIAlertController代替UIAlertView

  

UIAlertView在iOS 8中已弃用。(请注意,UIAlertViewDelegate是   也弃用了。)要在iOS 8及更高版本中创建和管理警报,   而是将UIAlertController与preferredStyle一起使用。