Ios 从UITextField继承的自定义类在Swift中不起作用(与自定义初始化一起)

Ios 从UITextField继承的自定义类在Swift中不起作用(与自定义初始化一起),ios,swift,inheritance,initialization,uitextfield,Ios,Swift,Inheritance,Initialization,Uitextfield,所以标题说明了一切。我试图创建一个显式继承UITextField的类。这是因为我想对UITextFields进行一些自定义。不过,我的主要目标是为类创建自定义初始值设定项,但是,这样做会遇到麻烦 这是我的密码: import UIKit class CustomTextField: UITextField { //Class variables required init(coder decoder: NSCoder, other:String) { sup

所以标题说明了一切。我试图创建一个显式继承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)

    }
}
但是编译器抱怨:
“必需的”初始值设定项“init(coder:)”必须由“UITextField”的子类提供。
。然后,我继续应用建议的问题修复程序,它在我所需的init代码的正下方添加了以下代码:

required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
我上面的代码从不打印“实例化”

你能帮我一下吗?我的理想类将在初始值设定项中接收至少另外2个参数(除了编码器NSCoder one)。我不明白为什么我不能让它工作(也许我太习惯Java了,在Java中这样做更容易)

非常感谢您事先的帮助


干杯

如果您只是使用故事板,则不需要自定义或方便的初始值设定项,只需重写超级初始值设定项并在调用super之前启动变量,如下代码所示

import UIKit

class MyTextView: UITextView {

    var myValue:Int
    var myText:String


    required init(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }

    override init(frame: CGRect, textContainer: NSTextContainer?) {
        myText = String()
        myValue = Int()
        super.init(frame: frame, textContainer: textContainer)
    }

}

如果要以编程方式执行此操作,请执行以下操作:

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")
    }
}
required init(coder)
是必需的,即使您不使用它

如果您的文本字段添加到故事板中,请不要忘记在Identity Inspector中将该字段的类别更改为
CustomTextField
,您可以使用下面的代码自定义某些内容:

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

您是在使用故事板还是以编程方式实例化它?我正在使用故事板。我还想编写一些方法。我知道我可以使用扩展,但它最适合我的需要,只是创建一个单独的类。编译器不再抱怨了,但每当我启动应用程序时,它就会崩溃。它标记fatalError(“init(coder:)”尚未实现)行。我正在将CustomTextField类分配给我的故事板中的UITextField。顺便说一句,谢谢您也需要传递框架,我更新代码以修复它。因为我正在使用故事板,我希望保持我的UITextField的大小。这可以实现吗?如果您使用的是storyboard,您不需要自定义初始值设定项,您只需要重写超级初始化项来启动变量,我会为您更新代码如果您使用的是storyboard,您必须重写
init(coder:)
,由于这是故事板使用的初始化器,如果我想保留故事板中的框架,使其“大小”不变,该怎么办?我只想添加一些自定义项,例如边框颜色和字体类型,也可以添加一个图像,但我希望其他所有内容都默认从超类的init继承。这能实现吗?谢谢如果您正在使用故事板,请编辑答案。它会显示println消息,但不会更改cornerRadius或颜色。。。你知道为什么吗?将borderWidth更改为1.0,它应该会改变。我正在这样做(我在某个地方读到,在更改拐角半径之前,你必须设置边界宽度),这不是问题所在。在我的viewDidLoad方法中,我重置了颜色和所有内容(我删除了那里的功能,它工作了)。这就引出了我的最后一个问题。这意味着awakeFromNib()在viewDidLoad之前执行,对吗?它是启动屏幕退出视图堆栈后加载的第一个方法吗?非常感谢你的帮助!