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