如何为 UIAlertController(ActionSheet) 创建全局函数以在许多 类 项目中访问

How to make a global function for UIAlertController(ActionSheet) to access in many classes of project

我想在 NSObject class 中为 UIAlertCotroller 创建一个函数。这样我就可以在任何 class 中访问这个函数。我尝试使用以下代码:

open class func showActionSheet(_ delegate: UIViewController, message: String, strtittle: String, handler: ((UIAlertController) -> Void)! = nil)
    {
        let actionSheetController: UIAlertController = UIAlertController(title: strtittle, message: message, preferredStyle: UIAlertControllerStyle.actionSheet)

        if handler == nil{
            actionSheetController.addAction(UIAlertAction(title: "Default(Off)" , style: .default , handler:{ (UIAlertAction)in
            }))
        }
        else{
            actionSheetController.addAction(UIAlertAction(title: "Default(Off)" , style: .default , handler:{ (UIAlertAction)in

            }))
        }

        delegate.present(actionSheetController, animated: true, completion: {
            print("completion block")
        })
    }

这是我做的功能,但问题是 ActionSheet 中可以有很多动作,它们也有不同的标题和不同的风格。

问题:如何实现这个功能?请帮助。

谢谢!

扩展 UIAlertController

extension UIAlertController{

func AlertWithTextField(_ view:UIViewController) -> UIAlertController{

    let actionSheetController: UIAlertController = UIAlertController(title: "Action Sheet", message: message, preferredStyle: UIAlertControllerStyle.actionSheet)


        actionSheetController.addAction(UIAlertAction(title: "No" , style: .default , handler:{ (UIAlertAction)in

        }))
       actionSheetController.addAction(UIAlertAction(title: "Yes" , style: .default , handler:{ (UIAlertAction)in

       }))


    view.present(actionSheetController, animated: true, completion: {
        print("completion block")
    })
 return actionSheetController
}
}

从您的 ViewController

中调用
  let alert = UIAlertController()
  alert.AlertWithTextField(self)

我已经找到了解决问题的方法 Swift - How to present ViewController when tapping button in a custom AlertController

他们正在进行修改,我必须做这些修改才能实现我的目标。这是代码:

在控制器中 Class:

 Alert.showActionSheet(self, message: "Save incoming media for this chat",strtittle: "",actionTittle: ["Default(Off)","Always","Never","Cancel"],
                                        actionStyle:  [.default,.default,.default,.cancel] ,
                                        withHandler:  [defaultHandler, alwaysHandler, neverHandler, cancelHandler])

func defaultHandler(action: UIAlertAction) {
        //Add code of present
        print("DefaultHandler")
    }

    func alwaysHandler(action: UIAlertAction) {
        //Add code of present
        print("alwaysHandler")

    }

    func neverHandler(action: UIAlertAction) {
        //Add code of present
         print("neverHandler")
}

func cancelHandler(action: UIAlertAction) {
    //Add code of present
     print("cancelHandler")
}

在NSObject中Class:

open class func showActionSheet(_ delegate: UIViewController, message: String, strtittle: String, actionTittle: [String], actionStyle: [UIAlertActionStyle], withHandler handler: [((UIAlertAction) -> Void)]?)
    {
        var actionSheetController: UIAlertController = UIAlertController()

        if message != "" || strtittle != ""
        {
            actionSheetController = UIAlertController(title: strtittle, message: message, preferredStyle: UIAlertControllerStyle.actionSheet)
        }

        for i in 0..<actionTittle.count
        {
            actionSheetController.addAction(UIAlertAction(title: actionTittle[i],
                                                          style: actionStyle[i],
                                                          handler: handler?[i]))
        }

        delegate.present(actionSheetController, animated: true, completion: nil)

    }

使用这个我可以给出动作的数量、它们的标题和动作的风格sheet。而且我也可以在每个 class 中简单地调用这个方法。 :)