Ios 将UIView、UIViewController子类化,并在情节提要和界面生成器中直观地显示默认值

Ios 将UIView、UIViewController子类化,并在情节提要和界面生成器中直观地显示默认值,ios,swift,xcode,uiview,interface-builder,Ios,Swift,Xcode,Uiview,Interface Builder,是否有一种方法可以在Swift中设置UIView和UIViewController的子类,使所有使用Xcode interface builder创建的新UIView都使用我的子类中的默认值 换句话说,如果我为UIView的子类创建此代码: import UIKit @IBDesignable class GenericUIView: UIView { // MARK: Initialization @IBInspectable var myBackgroundCol

是否有一种方法可以在Swift中设置UIView和UIViewController的子类,使所有使用Xcode interface builder创建的新UIView都使用我的子类中的默认值

换句话说,如果我为UIView的子类创建此代码:

import UIKit

@IBDesignable
class GenericUIView: UIView {
    // MARK: Initialization

    @IBInspectable
    var myBackgroundColor : UIColor = UIColor.orange

    override init (frame: CGRect) {
        super.init(frame: frame)
        setup()
    }


    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    func setup() {
        self.layer.backgroundColor = (myBackgroundColor as! CGColor)
    }

} 
我需要做什么才能立即看到Xcode接口生成器中的更改

我希望能够在不必手动编辑所有属性的情况下为我的应用程序设置主题,并且在不构建解决方案的情况下仍能直观地看到它们。我知道覆盖drawRect()是有可能的,但如果只是设置背景和文本颜色,可能会降低我的应用程序性能

如果可能,请提供Swift语言的解决方案


帕特里克这有帮助吗?您必须更改所有视图才能使用该类而不是UIView。您应该以同样的方式添加其他属性,如backgroundcolor(您似乎知道)


好的,我想我拿到了。有人能确认这是否是最佳实践,以及这是否会在以后的程序中导致其他问题吗?其实比我想的要简单得多: 导入UIKit

@IBDesignable
class GView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.backgroundColor = UIColor.orange.cgColor

    }
}

UIView
已具有可在Interface Builder中检查的
backgroundColor
属性;为什么要尝试为已经存在的属性添加包装器属性?我正在尝试将它们默认为我将创建的所有新UIView&UIViewController。我不想一直浏览我所有的视图来编辑和更改颜色。我确实尝试过你的解决方案。唯一的问题是,即使我在代码中为默认设置设置了值,它也不会显示我的默认设置。我必须手动转到每个UIView,并在Interface Builder中手动调整设置。请参阅下面的代码。我试图将代码粘贴到这里,但如果没有格式化,它看起来不正确。我用代码创建并回答。我曾希望,一旦IB重新加载对象,它将为您采用默认值。我将在稍后使用它。
@IBDesignable
class GView: UIView {

    override func layoutSubviews() {
        super.layoutSubviews()
        self.layer.backgroundColor = UIColor.orange.cgColor

    }
}