将@IBInspectable与情节提要中的任何UIView子类一起使用

时间:2019-04-13 10:04:06

标签: swift generics xcode-storyboard ibinspectable

我有一个与@IBInspectable一起使用的类,可以在我的情节提要中获取属性。这是其中的一小部分:

/// UIView subclass to allow creating corners, shadows, and borders in storyboards.
final class GEView: UIView {

    // MARK: - Rounded corners
    @IBInspectable
    var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = self.cornerRadius
            layer.masksToBounds = true
        }
    }

    /* ... */
}

这在我的故事板中的UIView内完全可以正常工作。但是,我希望它也可以用于UIImageViewUIView的其他子类。通过以某种方式使它成为通用类而无需将我的GEView子类化,这是否可能?

1 个答案:

答案 0 :(得分:1)

将代码如下所示移至UIView的@IBDesignable extension

@IBDesignable extension UIView {    
    @IBInspectable var cornerRadius: CGFloat {
        set {
            layer.cornerRadius = newValue
            layer.masksToBounds = true
        }
        get {
            return self.cornerRadius
        }
    }
}

清除GEView中先前定义的变量的不需要的值/类型。这是检查器中的值。

enter image description here

任何UIView的检查器中可用的属性,包括其自身。

Properties avaliable in storyboard interface