自定义Uiview是使用Init(编码器)初始化的,如何使用INIT(frame)初始化它



所以我覆盖了init(frame)做很多事情:

class InputField: UIView {
    override init(frame: CGRect) {
        super.init(frame: frame);
        let label = UILabel(frame: CGRect(x: 8, y: 8, width: 73, height: 30));
        label.text = "I want";
        label.font = UIFont(name: "Avenir-Book", size: 26.0);
        addSubview(label);
        NSLayoutConstraint(item: label, attribute: .leading, relatedBy: .equal, toItem: self, attribute: .leadingMargin, multiplier: 1.0, constant: 8.0).isActive = true;
    }
    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder);
    }
}

问题是第二个init()不是第一个。我在故事板上设置的方式是拥有一个纯净的空的UIView,其类是InputField。为什么它使用第二个,而不是第一个?

我不想以编程方式创建InputField,因为我宁愿看到我在故事板上设置的视图。我知道如何卡住,但我主要想学习如何做。

编辑:如注释中所述,当前的解决方法正在init(coder)中执行该配置代码。但这仍然没有回答:为什么被称为而不是init(frame)

有不同的便利方法有助于初始化视图。当视图实际上初始化时,只需调用许多方法( -frame,-coder等)的一个
如果您需要执行任何自定义初始化,则可以使用common init方法。

最新更新