在iOS中利用Interface Builder进行UI设计时,不同控件的很多属性都不能直接在属性选项卡中进行设置,比如控件的圆角layer.cornerRadius
,边框宽度layer.borderWidth
,边框颜色layer.borderColor
等等。
我们通常都是通过KVC的keypath手动在runtime属性里面手动添加,如下图:
但是这种方式不能在Interface Builder的中直接显示出来,而必须运行后才能看到结果,如果属性能够在Interface Builder的图形化界面进行设置,并且动态的预览到效果,那样无疑会大大提高应用的开发效率。而XCode为我们提供了这样的一种方式,就是使用IBInspectable
和IB_DESIGNABLE
,这两个是IOS8为我们提供的特性,支持自定义属性映射到XIB(运行时机制) 。
在定义类的前面加上IB_DESIGNABLE
这个宏,那么该控件在xib或storyboard上就可以进行实时渲染了。
在定义类的属性前面加上IB_DESIGNABLE
宏,确保该属性在xib或storyboard上可以展示
这里用UIView的cornerRadius属性举例:
- 自定义类的声明
IB_DESIGNABLE
@interface IB : UIView //这里可以根据需要改继承的类,例如UIButton, UITextField
@property (nonatomic, assign) IBInspectable CGFloat cornerRadius;
@end
- 自定义类的实现
@implementation IB
- (void)drawRect:(CGRect)rect {
self.layer.cornerRadius = _cornerRadius;
self.clipsToBounds = YES;
}
@end
自定义类完成后将控件的类指定为自定义的类
这样会在属性选项卡中看到cornerRadius这个属性
这样就可以完成控件的动态刷新设置而不用等运行完后才能看到结果,最终效果如下: