所以我覆盖了 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()
而不是第一个。我在 Storyboard 中设置它的方法是使用一个普通的空 UIView
,其类是 InputField
。为什么它使用第二个而不是第一个?
我不想以编程方式创建 InputField,因为我更希望看到我在 Storyboard中设置的 View 。如果我遇到困难,我知道该怎么做,但我主要想学习如何以这种方式做到这一点。
编辑:如评论中所述,当前的解决方法是在 init(coder)
中执行该配置代码。但这仍然没有回答:为什么调用它而不是 init(frame)
?
最佳答案
有不同的便捷方法来帮助初始化 View 。当 View 实际初始化时,只有一个方法(-frame、-coder 等)将被调用。
如果您需要执行任何自定义初始化,您可以使用 common init
方法。
关于ios - 自定义 UIView 使用 init(coder) 初始化,如何使用 init(frame) 初始化它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42322731/