如何快速覆盖 UIAlertController 中的便利初始化?

Rub*_*yAn 5 ios swift uialertcontroller

我正在尝试覆盖 UIAlertController 中的便捷初始化,但它给了我一个错误,例如“初始化程序不会覆盖其超类中的指定初始化程序”。如何使用继承或扩展来覆盖它?我的代码如下。

import UIKit

class ColorAlertViewController: UIAlertController {

    override func viewDidLoad() {
        super.viewDidLoad()
    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()

    }

    override convenience init(title: String?, message: String?, preferredStyle: UIAlertControllerStyle, colorCode: String?){
        super.init(title: title, message: message, preferredStyle: preferredStyle)
    }
}
Run Code Online (Sandbox Code Playgroud)

Kni*_*gon 4

您没有覆盖任何便利 init,看起来您正在创建一个新的 init。

convenience init(title: String?, message: String?, preferredStyle: UIAlertControllerStyle, colorCode: String?){
    self.init(title: title, message: message, preferredStyle: preferredStyle)
}
Run Code Online (Sandbox Code Playgroud)

可能是你想要的,你只需要处理颜色代码

看来你得绕一圈了:

首先创建一个创建扩展

extension UIAlertController
{

    class func create(title: String?, message: String?, preferredStyle: UIAlertControllerStyle) -> AnyObject
    {
        return UIAlertController(title: title, message: message, preferredStyle: preferredStyle);
    }
}
Run Code Online (Sandbox Code Playgroud)

然后在 ColorAlertViewController 中,您将创建另一个函数来创建该对象:

class func createWithColor(title: String?, message: String?, preferredStyle: UIAlertControllerStyle, colorCode: String?) -> AnyObject
{
    var c = super.create(title, message: message, preferredStyle: preferredStyle);
    //handle color code here
    return c;
}
Run Code Online (Sandbox Code Playgroud)

现在无论你想在哪里创建这个对象,只需调用

var colorAlertView = ColorAlertViewController.createWithColor("title Name", message: "the message", preferredStyle: .ActionSheet, colorCode: "the color");
Run Code Online (Sandbox Code Playgroud)

当然,这在 UI 构建器中不起作用,您必须通过代码创建它。

  • 这导致了错误:“在调用 self.init 之前在委托初始化程序中使用“self””并且“未在委托初始化程序中的所有路径上调用 Self.init”。 (2认同)