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大喊,感谢他帮助我找到了这个答案