IB中Runtime Attributes个别属性无效

在使用Xcode IB方式编码中,经常会使用到属性列表中没有的属性,这时则需要通过Runtime Attributes来动态注入(实则为KVO实现)

但有个别属性设置你会发现怎样都无效

如:layer.borderColor

原因在于borderColor接受的参数是CGColor类型,而此处的Color为UIColor,所以导致注入时参数类型不一致

解决方案:利用扩展自定义一个中间属性器来转换一下类型就OK了

1、自定义代码

1
2
3
4
5
6
7
8
9
10
11
extension CALayer{
//解决IB中runtime attribute中layer.borderColor不能转换UIColor为CGColor
var borderColorFromUIColor: UIColor {
set(color){
self.borderColor = color.CGColor;
}
get{
return UIColor(CGColor: self.borderColor)
}
}
}

注意,swift与OC的属性设置器不同,OC中是setXXX,而swift是有内部setter

2、IB中设置,把原先的layer.borderColor改为layer.borderColorFromUIColor

参考:
User Defined Runtime Attributes