【发布时间】:2015-07-06 13:29:28
【问题描述】:
对于那些不知道我在说什么的人,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 属性也在工作,我可以看到我的自定义 UIView 类别在 IB 中呈现,它的图层属性已更改。这周它不工作。
我是不是产生了幻觉?
现有系统类的类别/扩展在使用 IBDesignable 设置时能否在 Interface Builder 中绘制其自定义 UI?
【问题讨论】:
-
是的,你可以...我相信。哪个部分不工作?您不能在属性检查器中设置属性?或者您可以在检查器中设置它们,但视图不会更新以反映更改?
-
嗯,我收回了。看起来我能够让属性显示在属性检查器中,但它们不会在界面生成器上更新。但是,如果我编译并运行,属性 被应用。
-
@nhgrif,我应该更清楚。这是正确的。属性显示在检查器中,我可以设置它们的值,然后它们在正在运行的程序中工作。但是该视图并未反映 IB 窗口中的更改。
-
IBDesignable 确实适用于自定义子类。看起来它不适用于类别/扩展,即使我可以发誓它上周工作。我想知道 Xcode 的最新更新是否破坏了它?
标签: ios interface-builder xcode-storyboard ibdesignable ibinspectable