首页 文章

IBDesignable UIButton IB渲染没有IBInspectables

提问于
浏览
1

我有以下代码来创建自定义IBDesignable UIButton . 请注意,我没有任何IBInspectables,因为我不需要任何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 {
}

}

有两个问题:

  • ShButton类没有显示在IB的自定义类下拉列表中,我必须手动输入它并提供模块名称 . 我也注意到这里没有显示"Designables Up to Date"指标,这在许多关于这个主题的教程中都有所体现 .

  • 它不会在IB中呈现 . 但是,当我在模拟器中运行项目时,它正确呈现 . 我错过了什么让它在IB中渲染?

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 ,并且在故事板和运行时都可以工作 .

    编辑:更新的答案

相关问题