对于那些不知道我在说什么的人,Xcode 6.0 添加了新功能,IBDesignable 和 IBInspectable。
当您使用 IBInspectable 属性标记自定义视图时,这些属性会显示在 IB 的 Attributes Inspector 中。
同样,当您使用 IBDesignable 标记自定义 UIView 子类时,Xcode 会编译您的视图并调用代码以直接在 Xcode 窗口中呈现您的视图对象,以便您可以看到它们的外观。
将 IBDesignable 和 IBInspectable 属性添加到自定义视图的技术在 Swift 和 Objective-C 中几乎相同。IBInspectable 属性出现在 Interface Builder Attributes Inspector 中,无论您使用哪种语言来定义它们。
我在 Objective-C 中创建了一个 UIView 类别,并在 Swift 中创建了 UIView 的扩展,将视图底层的borderWidth、cornerRadius、borderColor 和layerBackgroundColor 属性提升为视图的属性。如果更改属性,扩展/类别会根据需要进行类型转换并将更改转发到图层。
IBInspectable 部分效果很好。我看到并可以在 IB 属性检查器中设置新属性。
我本可以在上周发誓,我的视图类别/扩展上的 IBDesignable 属性也在工作,我可以在 IB 中看到我的自定义 UIView 类别呈现,它的图层属性已更改。这周它不工作。
我是不是产生了幻觉?
现有系统类的类别/扩展是否可以在使用 IBDesignable 设置时在 Interface Builder 中绘制其自定义 UI?