实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex

Posted

技术标签:

【中文标题】实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex【英文标题】:UIAlertViewDelegate method clickedButtonAtIndex not getting called when implementing my own delegate 【发布时间】:2015-01-10 10:14:59 【问题描述】:

我想从不同的 ViewController 中弹出一个警报。因为我想处理用户是否始终单击“确定”或“取消”,所以我决定实现自己的 UIAlertViewDelegate 并从我的 UIViewController 调用它。

问题是,当我单击“确定”或“取消”时,将永远不会调用 willDismissWithButtonIndex、didDismissWithButtonIndex 和 clickedButtonAtIndex。我知道我的委托正在被使用,因为将在警报显示时调用 willPresentAlertView() 和 didPresentAlertView()。

这是我代表的代码:

import UIKit

class AlertViewDelegate: NSObject, UIAlertViewDelegate 
    func willPresentAlertView(alertView: UIAlertView) 
        println("will present")
    

    func didPresentAlertView(alertView: UIAlertView) 
        println("did present")
    

    func alertViewCancel(alertView: UIAlertView) 
        println("cancelled")
    

    func alertView(alertView: UIAlertView, willDismissWithButtonIndex buttonIndex: Int) 
        println("will dismiss")
    

    func alertView(alertView: UIAlertView, didDismissWithButtonIndex buttonIndex: Int) 
        println("did dismiss")
    

    func alertView(alertView: UIAlertView, clickedButtonAtIndex buttonIndex: Int) 
        println("clicked")
    

这是我的 ViewController 的代码:

class ViewController: UIViewController 

    override func viewDidLoad() 
        super.viewDidLoad()

        var delegate = AlertViewDelegate()
        var alert = UIAlertView(title: "alert", message: "blah blah", delegate: delegate, cancelButtonTitle: "cancel", otherButtonTitles: "OK")
        alert.show()
    


我做错了什么?

【问题讨论】:

UIAlertView 在 ios 8 中已弃用 【参考方案1】:

这个变量 'var delegate = AlertViewDelegate()' 在作用域结束时被释放 所以什么都没有,尝试将delegate移动到属性

【讨论】:

以上是关于实现我自己的委托时未调用 UIAlertViewDelegate 方法 clickedButtonAtIndex的主要内容,如果未能解决你的问题,请参考以下文章

隐藏时未调用委托方法

创建新对话框时未调用委托方法

使用 xmpp 框架时未调用委托方法

在 UITableviewCell 中使用 UICollection 视图时未调用 UICollectionView 委托方法“didSelectItemAtIndexPath”

在 UI 自动化测试中解除警报时未调用 UIAlertView 的委托方法“clickedButtonAtIndex”

滚动时未调用 sizeForItemAt