如何在多个ViewController中使用自定义UIAlertview?

DG7

我正在寻找一种从多个视图控制器调用自定义警报视图的方法。到目前为止,我已经进行了几次不同的尝试,但均未成功。

  • 我使用界面构建器创建了一个警报视图,该界面构建器在一个视图控制器上工作正常,而在另一个视图控制器上却无法正常工作。

  • 然后,我尝试以编程方式创建警报视图,认为它可能与其他视图控制器上未连接插座有关。这个也使用一个视图控制器,而不是另一个。

  • 我制作了一个单独的swift文件,并设置了公共功能和相同的结果。使用最后一种方法,我能够在多个视图控制器上成功重用常规的UIAlertController,但这并不是我想要的。

使用前两种方法,不会出现任何编译错误。当我从另一个视图控制器调用警报时,该应用程序运行正常,然后崩溃。

预先感谢您的任何投入!

编辑:

当我将其放在另一个swift文件中时,此示例有效。

public func showSimpleAlert(title: String, message: String?, presentingController: UIViewController) {

if IS_OS_8_OR_LATER() {
    let controller = UIAlertController(title: title, message: message, preferredStyle: .Alert)

    controller.addAction(UIAlertAction(title: "OK", style: .Cancel, handler: { (action) -> Void in

    }))

    presentingController.presentViewController(controller, animated: true, completion: nil)
} else {
    let alert = UIAlertView(title: title, message: message, delegate: nil, cancelButtonTitle: "OK")
    alert.show()
}
}

这是我要从事的工作。

public func showAlert(oMsg: String, oTitle:String) {
    alertView.backgroundColor = UIColor.whiteColor()
    alertView.layer.cornerRadius = 25

    alertTitleLabel.text = oTitle as String
    alertTitleLabel.font = UIFont(name: "Open-Sans-Bold", size: 20)
    alertTitleLabel.textColor = UIColor.blackColor()
    alertTitleLabel.textAlignment = .Center
    alertTitleLabel.numberOfLines = 1
    alertTitleLabel.frame = CGRectMake(25, 60, 264, 112)

    alertLabel.text = oMsg as String
    alertLabel.font = UIFont(name: "Open-Sans", size: 20)
    alertLabel.textColor = UIColor.blackColor()
    alertLabel.textAlignment = .Center
    alertLabel.numberOfLines = 4
    alertLabel.frame = CGRectMake(25, 130, 264, 112)

    okButton.setTitle("OK", forState: .Normal)
    okButton.setTitleColor(UIColor.blueColor(), forState: .Normal)
    okButton.frame = CGRectMake(60, 230, 197, 75)
    okButton.addTarget(UIViewController.self, action:#selector(LoginViewController.buttonAction(_:)), forControlEvents: .TouchUpInside)

}
西巴什语

我将给出一个简单的自定义alertview的答案,它基本上是一个经过修改的uiviewcontroller。您可以按照以下方式将uiviewcontroller用作uialertviewcontroller。

简单的AlertView ::

在此处输入图片说明

AlertVC:

import UIKit

class ErrorAlert: UIViewController {
    var titlenote:String = ""
    var message:String = ""

    @IBOutlet weak var cancelBtn: UIButton!
    @IBOutlet weak var messageHolder: UILabel!

    @IBOutlet weak var imageHolder: UIImageView!
    @IBOutlet weak var titleHolder: UILabel!
    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor =  UIColor.black.withAlphaComponent(0.7)
        // Do any additional setup after loading the view.
    }
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)

    }
    override func viewWillAppear(_ animated: Bool) {
        super.viewWillAppear(animated)
        self.messageHolder.text = self.message
        self.titleHolder.text = self.titlenote

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }

    @IBAction func dismiss(_ sender: Any) {
        self.dismiss(animated: true, completion: nil)
    }


}

该viewcontroller可以在任何vc中重复使用,并且可以重复使用多次。

使用示例:

let alertController = self.storyboard?.instantiateViewController(withIdentifier: "erroralert") as! ErrorAlert
                alertController.titlenote = "Invalid login"
                alertController.message = "Invalid facebook account."
                alertController.providesPresentationContextTransitionStyle = true
                alertController.definesPresentationContext = true
                alertController.modalPresentationStyle = UIModalPresentationStyle.overCurrentContext
                alertController.modalTransitionStyle = UIModalTransitionStyle.crossDissolve
                self.present(alertController, animated: true, completion: nil)

通过设置alpha值,我使Alertviewvc的背景为半透明的。

实际显示::

在此处输入图片说明

您可以通过这种方法制作更复杂的alertview,但是对于可重用性,您需要应用一些逻辑,因为对于不同的viewcontroller,按钮动作将有所不同。示例-有时您可以使用alertview来注销警报,也可以某个时间来提交表单。因此在两种情况下,操作都将有所不同,因此为了可重用性,您必须编写额外的逻辑。

另一个alertView ::

在此处输入图片说明

希望我的回答对您有所帮助。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Android中使用自定义适配器获取多个值

来自分类Dev

如何在Tensorflow 2.x Keras自定义层中使用多个输入?

来自分类Dev

如何在Storyboard中使用自定义UICollectionViewCell?

来自分类Dev

如何在MVC中使用自定义storeId?

来自分类Dev

如何在自定义对象的android中使用ArrayAdapter

来自分类Dev

如何在自定义指令中使用ngChange

来自分类Dev

如何在动态编译中使用自定义类

来自分类Dev

如何在SublimeText中使用自定义字体

来自分类Dev

如何在Swagger中使用自定义模板

来自分类Dev

如何在MSBuild脚本中使用自定义变量?

来自分类Dev

如何在Java中使用自定义类型注释

来自分类Dev

如何在QStateMachine addtransition中使用自定义信号

来自分类Dev

如何在iOS中使用.ttc自定义字体

来自分类Dev

如何在网站中使用自定义字体

来自分类Dev

如何在自定义jQuery函数中使用函数

来自分类Dev

如何在Maven中使用自定义库?

来自分类Dev

如何在Python中使用自定义谓词排序

来自分类Dev

如何在@require(Greasemonkey)中使用自定义变量

来自分类Dev

如何在自定义类中使用Dask

来自分类Dev

Angular如何在自定义ErrorHandler中使用HttpClient?

来自分类Dev

如何在torchscript中使用自定义python对象

来自分类Dev

如何在TypeScript中使用自定义钩子(Fetch)

来自分类Dev

如何在自定义下载器中使用glide

来自分类Dev

如何在IMFSourceReader中使用自定义堆

来自分类Dev

如何在Ghostscript / PostScript中使用自定义字体?

来自分类Dev

NextJS:如何在自定义钩子中使用窗口?

来自分类Dev

如何在Yii中使用CListView自定义dataProvider

来自分类Dev

如何在JSP中使用自定义窗口

来自分类Dev

如何在html表单中使用自定义按钮

Related 相关文章

热门标签

归档