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

时间:2015-08-13 12:39:38

标签: xcode swift interface-builder ibdesignable

例如,我希望子类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字体大小。有什么想法吗?

3 个答案:

答案 0 :(得分:4)

我已将新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()
    }
}

希望它可以帮助你:)

这对我有用。

答案 1 :(得分:0)

我认为你必须使用帧初始化器覆盖init以影响

override init(frame: CGRect) {

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

答案 2 :(得分:0)

EASIER:以下解决方案通常对我有用

import UIKit

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

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

我希望这就是您想要的。