如何使UIAlertController(ActionSheet)的全局函数在许多项目的类中访问



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

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中可以有许多动作,它们也具有不同的标题和不同的样式。

问:如何制作此功能?请帮忙。

谢谢!

make extension of 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
}
}

从您的视图控制器调用此函数

  let alert = UIAlertController()
  alert.AlertWithTextField(self)

我通过使用这个 Swift 找到了我的问题的解决方案 - 如何在自定义警报控制器中点击按钮时显示视图控制器

他们正在遵循我为实现目标而必须做的修改。这是代码:

在控制器类中:

 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 类中:

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)
    }

使用它,我可以为动作表提供许多动作、它们的标题和风格。而且我可以在每个类中简单地调用此方法。 :)

最新更新