1

我有下面的代码来创建一个自定义的 IBDesignable UIButton。请注意,我没有任何 IBInspectables,因为我不需要任何东西。我希望我的所有自定义按钮都相同。

import UIKit

@IBDesignable class ShButton: UIButton {

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

override init(frame: CGRect) {
    super.init(frame: frame)
    self._setup()
}


override func awakeFromNib() {
    self._setup()
}

override func prepareForInterfaceBuilder() {
    self._setup()
}

private func _setup(){
    self.layer.cornerRadius = 5.0
    self.layer.masksToBounds = true
    self.layer.borderColor = UIColor.whiteColor().CGColor
    self.layer.borderWidth = 1.0
    self.setNeedsDisplay()
}

override func drawRect(rect: CGRect) {
    super.drawRect(rect)
}

deinit {
}

}

有两个问题:

  1. ShButton 类没有显示在 IB 的自定义类下拉列表中,我必须手动输入它并提供模块名称。我还注意到这里也没有显示“Designables Up to Date”指示器,这在有关该主题的许多教程中都有显示。
  2. 它不会在 IB 中呈现。但是,当我在模拟器中运行项目时,它会正确呈现。我是否缺少任何使其在 IB 中呈现的内容?
4

1 回答 1

1

我仍然是一个 iOS 新手,但我有类似的情况,这对我来说很好:

@IBDesignable class ShButton: UIButton {

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

    override init(frame: CGRect) {
        super.init(frame: frame)
        self._setup()
    }

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

    private func _setup(){
        self.layer.cornerRadius = 5.0
        self.layer.masksToBounds = true
        self.layer.borderColor = UIColor.whiteColor().CGColor
        self.layer.borderWidth = 1.0
        self.setNeedsDisplay()
    }
}

这使我可以cornerRadius在按钮上设置默认值,而无需使用IBInspectable,并且在情节提要和运行时都可以使用。

编辑:更新的答案

于 2016-03-09T15:48:52.350 回答