从UITextField继承的自定义类在Swift中不起作用(使用自定义init)

ide*_*ara 4 inheritance initialization uitextfield ios swift

所以标题说明了一切.我正在尝试创建一个显式继承自UITextField的类.这是因为我想对我的UITextFields进行一些自定义.我的主要目标是为类创建一个自定义初始化程序,但是,这样做会遇到麻烦.

这是我的代码:

import UIKit

class CustomTextField: UITextField {

    //Class variables

    required init(coder decoder: NSCoder, other:String) {
        super.init(coder: decoder)
        self.layer.cornerRadius = 15
        println("Instantiated")
        println(other)

    }
}
Run Code Online (Sandbox Code Playgroud)

但编译器抱怨:'required' initializer 'init(coder:)' must be provided by subclass of 'UITextField'.然后我继续并对问题应用建议的修复,并在我所需的初始化代码下面添加以下代码:

required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
Run Code Online (Sandbox Code Playgroud)

上面的代码从不打印"实例化"

你能帮帮我吗?我理想的类在初始化器中至少会收到另外两个参数(除了编码器-NSCoder一个).我不明白为什么我不能让这个工作(也许我已经习惯了Java,这样做更容易).

非常感谢你的帮助!

干杯!

Een*_*dje 10

如果您想以编程方式执行此操作:

class CustomTextField: UITextField {

    init(frame: CGRect, arg1: CGFloat, arg2: String) {
        super.init(frame: frame)

        self.layer.cornerRadius = arg1
        print(arg2)
        print("Instantiated")
    }

    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
}
Run Code Online (Sandbox Code Playgroud)

required init(coder) 即使您不使用它也是强制性的.

如果在storyboard中添加了文本字段,请不要忘记CustomTextField在Identity Inspector中更改该字段的类,并且可以使用下面的代码来自定义一些内容:

class CustomTextField: UITextField {

    override func awakeFromNib() {
        super.awakeFromNib()

        layer.cornerRadius = 5
        layer.borderColor = UIColor.greenColor().CGColor
        layer.borderWidth = 1.0

        // Set other stuff like font color etc.

        print("Instantiated")
    }
}
Run Code Online (Sandbox Code Playgroud)