0

我一直在玩 IBInspectable/IBDesignable,就像在这篇文章中一样:http: //nshipster.com/ibinspectable-ibdesignable/

它展示了如何进行扩展以在情节提要中添加额外的编辑选项。但问题是您无法在预览中看到这些更改。为此,您需要继承、使用IBDesignable和做这些didset{}事情。

这样做的问题是您需要为每个股票子类创建一个子UIView类。所以是 的子类UILabelUITextField依此类推。每次你必须复制/粘贴常规的UIView东西,比如边框和圆角半径。

我不相信 Swift 支持多重继承,这会使这变得容易得多。

假设您的IBDesignable子类UIView被称为IBView. 有没有办法让例如UILabel成为一个子类IBView而不是UIView

最后,我正在寻找是否有一种方法可以IBDesignable减少乏味。

4

1 回答 1

3

和你一样,我正在努力寻找更好的解决方案来使用 IBDesignable。

我做了什么来避免重复相同的代码:

  1. 我对 UIView 进行了扩展,以插入我想要的所有 @IBInspectables(如圆弧半径、边框宽度......)。
  2. 我创建了仅从 UIView、UIButton(或我想要的任何 UIView 子类)继承的 @IBDesignables,以便在 Interface Builder 上呈现。

检查此代码:

extension UIView {

    @IBInspectable var cornerRadius: CGFloat {
        get {
            return layer.cornerRadius
        }
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = newValue > 0
        }
    }

    @IBInspectable var borderColor: UIColor? {
        get {
            return UIColor(cgColor: layer.borderColor ?? UIColor.clear.cgColor)
        }

        set {
            layer.borderColor = newValue?.cgColor
        }
    }

    @IBInspectable var borderWidth: Double {
        get {
            return Double(layer.borderWidth)
        }

        set {
            layer.borderWidth = CGFloat(newValue)
        }
    }
}

@IBDesignable
class BorderView: UIView { }

@IBDesignable
class BorderButton: UIButton { }

我希望它对你有帮助!

于 2017-01-12T14:09:04.573 回答