IBInspectable / IBDesignable
Nate Cook撰写、April Peng翻译、 发布于2015年2月2日
展示,而不是描述。眼见为实。一图胜千邮件言。
无论陈词滥调多少次,比起一个需要我们记住并且输入什么的界面来说,如果替换成我们能够看见并可控制的界面的话将会是巨大的进步。 Xcode 6 提供了这样一个替代,在旧技术上建立新的互动。在设计项目的时候建立一个自定义的界面使你可以配置自定义控制并将它们实时显示出来,用IBInspectable
和IBDesignable
,这将成为可能。
IBInspectable
IBInspectable
属性提供了访问旧功能的新方式:用户自定义的运行时属性。从目前的身份检查器(identity inspector)中访问,这些属性在 Interface Builder 被整合到 Xcode 之前就可用了。他们提供了一个强有力的机制来配置一个 NIB,XIB,或者 storyboard 实例中的任何键值编码(key-value coded)属性:
虽然功能强大,运行时属性可能会使工作很繁琐。一个属性的关键字路径,类型和属性值需要在每个实例设置,没有任何自动完成或输入提示,这就需要前往文档或自定义子类的源代码仔细检查设置。IBInspectable
属性彻底的解决了这个问题:在 Xcode 6,你现在可以指定任何属性作为可检查项并为你的自定义类建立了一个用户界面。
例如,在一个UIView
子类里,这些属性用它们的值来更新背景层:
@IBInspectable var cornerRadius: CGFloat = 0 {
didSet {
layer.cornerRadius = cornerRadius
masksToBounds = cornerRadius > 0
}
}
@borderWidth: borderWidth = borderWidth
}
}
@borderColor: UIColor? {
borderColor = borderColor?.CGColor
}
}
标有@IBInspectable
(或是 Objective-C 中的IBInspectable
),他们就可以很容易在 Interface Builder 的观察面板(inspector panel)里编辑。需要注意的是 Xcode 在这里做了更多的事,属性名称是从 camel- 转换为 title- 模式 并且相关的名称组合在一起:
因为可检查属性仅仅是用户定义的运行时属性顶部的接口,所以支持相同的类型列表:布尔,字符串和数字(即,NSNumber
或任何数值类型),以及CGPoint
、CGSize
、CGRect
、UIColor
和NSRange
,额外增加了UIImage
。
那些已经熟悉运行时属性的人将注意到在上面的例子中有一些问题。
UIColor
是里面唯一支持色彩的类型,而不是原生支持视图CALayer
的CGColor
。borderColor
会计算UIColor
属性(通过运行时属性设置)并映射到该层需要的CGColor
。
让现有的类型可观察
内置的 Cocoa 类型如果在 Interface Builder 中的属性检查器中没有列出也可以通过扩展来使属性可视。如果你喜欢圆角,你一定会喜欢这个UIView
扩展:
变!你创建的任何UIView
都将有一个可配置的边界半径。
IBDesignable
如果这还不够,IBDesignable
自定义视图也在 Xcode 6 中亮相了。当应用到UIView
或NSView
子类中的时候,@ IBDesignable
让 Interface Builder 知道它应该在画布上直接渲染视图。你会看到你的自定义视图在每次更改后不必编译并运行你的应用程序就会显示。
标记一个自定义视图为IBDesignable
,只需在类名前加上@IBDesignable
的前缀(或是 Objective-C 里的IB_DESIGNABLE
宏)。你的初始化、布置和绘制方法将被用来在画布上渲染你的自定义视图: