Mor*_*lde 6 interface-builder ios swift ibdesignable
我很好奇为什么不设置backgroundColor
为红色?
@IBDesignable class CustomLabel: UIView {
let view = UIView()
func setup() {
backgroundColor = UIColor.red
view.backgroundColor = UIColor.green
view.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
addSubview(view)
}
override init(frame: CGRect) {
super.init(frame: frame)
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setup()
}
}
Run Code Online (Sandbox Code Playgroud)
这是结果.
这就是我期望的样子.
san*_*san 11
在"界面"构建器(IB)中进行渲染时,在调用后加载在自定义UI元素的IB中设置的属性init
.您的设置代码backgroundColor
中init
获取调用.但在那之后,它再次设定了IB backgroundColor
的价值backgroundColor
.
我找不到Apple的文档.我基于以下分析说这个.我修改了一些代码用于调试.
@IBDesignable class CustomLabel: UIView {
let view = UIView()
override var backgroundColor: UIColor? {
didSet {
print("here: "); // break point 1
}
}
func setup() {
self.backgroundColor = UIColor.redColor() // break point 2
view.backgroundColor = UIColor.greenColor()
view.frame = CGRect(x: 0, y: 0, width: 50, height: 50)
addSubview(view)
}
override init(frame: CGRect) {
super.init(frame: frame) // break point 3
setup()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder) // break point 4
setup()
}
}
Run Code Online (Sandbox Code Playgroud)
现在,将断点放在所有方法中.然后,CustomLabel
在Interface Builder中选择对象,然后选择编辑器➔调试所选视图.
您可以看到方法调用的顺序.这只显示了界面构建器中的渲染顺序,而不是它在运行时可能遵循的顺序.
您可能知道这一点,但为了清楚起见,您可以使用以下内容在IB中反映出来.
override func prepareForInterfaceBuilder() {
super.prepareForInterfaceBuilder()
backgroundColor = UIColor.grayColor()
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1900 次 |
最近记录: |