所以我覆盖了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
方法。