UIAlertAction - 处理动作

Posted

技术标签:

【中文标题】UIAlertAction - 处理动作【英文标题】:UIAlertAction - Handling Actions 【发布时间】:2018-03-03 17:21:09 【问题描述】:

我有一个助手来显示我的警报

import UIKit

class AlertDialog 
    class func showAlert(_ title: String, message: String, viewController: UIViewController) 
        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let OKAction = UIAlertAction(title: "OK", style: .default, handler: nil)
        alertController.addAction(OKAction)
        let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: nil)
        alertController.addAction(cancelAction)
        viewController.present(alertController, animated: true, completion: nil)
    

如何管理视图控制器中的操作?

我是这样调用函数的;

AlertDialog.showAlert("Ok", message: "Some Message", viewController: self)

我需要获取处理程序选项。我应该将“handler: nil”改成什么?

【问题讨论】:

Writing handler for UIAlertAction的可能重复 建议的副本是在视图控制器中使用 AlertAction,而不是使用单独的辅助类。 【参考方案1】:

您可以在showAlert 方法中添加两个处理程序参数,一个用于确定操作,另一个用于取消操作。所以你的代码可能看起来像这样:

class AlertDialog 
    class func showAlert(_ title: String, message: String, viewController: UIViewController,
                     okHandler: (() -> Swift.Void),
                     cancelHandler: (() -> Swift.Void)) 

        let alertController = UIAlertController(title: title, message: message, preferredStyle: .alert)
        let OKAction = UIAlertAction(title: "OK", style: .default, handler: okHandler)
        alertController.addAction(OKAction)
        let cancelAction = UIAlertAction(title: "Cancel", style: .default, handler: cancelHandler)
        alertController.addAction(cancelAction)
        viewController.present(alertController, animated: true, completion: nil)
    

从你的 viewController 你会调用:

AlertDialog.showAlert("Ok", message: "Some Message", viewController: self, okHandler: 
            //OK Action
        ,cancelAction: 
            //Cancel Action
        )

【讨论】:

鉴于这个问题,我认为通过展示如何使用新参数的示例来回答会有所帮助。【参考方案2】:

你应该可以这样做:

class func showAlert(_ title: String, message: String, viewController: UIViewController, ok: ((UIAlertAction) -> Void)?, cancel: ((UIAlertAction) -> Void)?) 
    let okAction = UIAlertAction(title: "Ok", style: .default, handler: ok)
    let cancelAction = UIAlertAction(title: "Ok", style: .default, handler: cancel)

然后你可以这样使用它:

AlertDialog.showAlert("Ok", message: "Some Message", viewController: self, ok:  (alertAction) in 
    // do something for ok
, cancel:  (alertAction) in
    // do something for cancel
)

【讨论】:

以上是关于UIAlertAction - 处理动作的主要内容,如果未能解决你的问题,请参考以下文章

UIAlertAction 可以触发函数吗?

如何执行 UIAlertAction 的处理程序?

制作 UIAlertAction 处理程序的正确方法

未调用 UIAlertAction 处理程序

在 UIAlertAction 处理程序中更新 UI

UIAlertAction 的处理程序有点太晚了——我怎样才能让它立即生效?