@IBDesignable 在 IB 中不显示背景颜色

@IBDesignable not showing background color in IB

我有一个如下所示的 UIView:

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 是一个 IB 属性 不是通过 @IBInspectable 创建的,它似乎总是覆盖 init 或 draw 方法中的任何内容。意思是,如果它在 IB 中是 "default",它会导致它被 nil 覆盖。但是,如果在 prepareForInterfaceBuilder 方法中设置,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 中它是 "default"(读取 nil),这会将背景颜色默认为一种颜色,但如果在 IB 中设置了背景颜色,则不使用 UIColor.green,这正是我需要。

在#swift-lang irc 中感谢 Eridius 帮助我得到这个答案。