Uiview @IBDesignable在IB中不显示背景色
我的看法如下:Uiview @IBDesignable在IB中不显示背景色,uiview,interface-builder,xcode8,ibdesignable,Uiview,Interface Builder,Xcode8,Ibdesignable,我的看法如下: import UIKit @IBDesignable class CHRAlertView: UIView { @IBOutlet var icon:UILabel! @IBOutlet var alertText:UITextView! override init(frame: CGRect) { super.init(frame: frame) self.initialize() } requi
import UIKit
@IBDesignable
class CHRAlertView: UIView {
@IBOutlet var icon:UILabel!
@IBOutlet var alertText:UITextView!
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
private func initialize(){
self.backgroundColor = UIColor.green
}
}
根据@IBDesignable的工作原理,它应该以绿色背景显示在IB中,但我得到的清晰颜色如下:
为什么这不能像预期的那样发挥作用?我需要根据@IBDesignable中设置的默认值在IB中显示背景色。由于
backgroundColor
是不是通过@IBInspectable创建的IB属性,它似乎总是覆盖init或draw方法中的任何内容。也就是说,如果它在IB中是“default”,则会导致它被nil覆盖。但是,如果在prepareforPrinterFaceBuilder
方法中设置backgroundColor有效并在IB中显示。因此,可以合理地假设必须在运行时设置backgroundColor
。为此,我有以下几点:
//------------------
//Setup and initialization
//------------------
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
//Setups content, styles, and defaults for the view
private func initialize(){
self.staticContent()
self.initStyle()
}
//Sets static content for the view
private func staticContent() {
}
//Styles the view's colors, borders, etc at initialization
private func initStyle(){
}
//Styles the view for variables that must be set at runtime
private func runtimeStyle(){
if self.backgroundColor == nil {
self.backgroundColor = UIColor.green
}
}
override func prepareForInterfaceBuilder() {
self.runtimeStyle()
}
override func awakeFromNib() {
super.awakeFromNib()
self.runtimeStyle()
}
如果IB中的backgroundColor为“default”(读取nil),则默认为颜色,但如果IB中设置了backgroundColor,则不使用UIColor.green,这正是我所需要的
在#swift lang irc中向Eridius大声呼喊,感谢他帮助我找到了这个答案。因为
backgroundColor
是一个IB属性,不是通过@IBInspectable创建的,所以它似乎总是覆盖init或draw方法中的任何内容。也就是说,如果它在IB中是“default”,则会导致它被nil覆盖。但是,如果在prepareforPrinterFaceBuilder
方法中设置backgroundColor有效并在IB中显示。因此,可以合理地假设必须在运行时设置backgroundColor
。为此,我有以下几点:
//------------------
//Setup and initialization
//------------------
override init(frame: CGRect) {
super.init(frame: frame)
self.initialize()
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
self.initialize()
}
//Setups content, styles, and defaults for the view
private func initialize(){
self.staticContent()
self.initStyle()
}
//Sets static content for the view
private func staticContent() {
}
//Styles the view's colors, borders, etc at initialization
private func initStyle(){
}
//Styles the view for variables that must be set at runtime
private func runtimeStyle(){
if self.backgroundColor == nil {
self.backgroundColor = UIColor.green
}
}
override func prepareForInterfaceBuilder() {
self.runtimeStyle()
}
override func awakeFromNib() {
super.awakeFromNib()
self.runtimeStyle()
}
如果IB中的backgroundColor为“default”(读取nil),则默认为颜色,但如果IB中设置了backgroundColor,则不使用UIColor.green,这正是我所需要的
在#swift lang irc中向Eridius大喊,感谢他帮助我找到了这个答案