是否可以使 @IBDesignable 覆盖 Interface Builder 值?

Is it possible to make @IBDesignable override Interface Builder values?

例如,我想继承 UIButton 并将其字体默认设置为 20.0f。我可以这样写:

@IBDesignable

class HCButton: UIButton {
  required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)
    self.customInit()
  }

  func customInit () {
    titleLabel?.font = UIFont.systemFontOfSize(20)
  }
} 

但这不影响在 Interface Builder 中的预览,所有自定义按钮默认显示 15.0f 字体大小。有什么想法吗?

我认为您也必须使用框架初始化程序重写 init 才能影响它

override init(frame: CGRect) {

    super.init(frame: frame)
    self.customInit()
}

我创建了新的 IBInspectable 作为 testFonts :

import UIKit

@IBDesignable

class CustomButton: UIButton {
    override init(frame: CGRect) {
        super.init(frame: frame)
        self.customInit()
    }

    required init(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        self.customInit()
    }

    func customInit () {
        titleLabel?.font = UIFont.systemFontOfSize(20)
    }

    convenience init() {
        self.init(frame:CGRectZero)
        self.customInit()
    }

    override func awakeFromNib() {
        super.awakeFromNib()
        self.customInit()
    }

    override func prepareForInterfaceBuilder() {
        super.prepareForInterfaceBuilder()
        self.customInit()
    }
}

希望对你有帮助:)

这对我有用。

更简单:以下解决方案通常对我有用

import UIKit

@IBDesignable
class CustomButton: UIButton {
    open override func layoutSubviews() {
        super.layoutSubviews()
        customInit()
    }

    func customInit () {
        titleLabel?.font = UIFont.systemFontOfSize(20)
    }
}

希望这就是您要找的。