IB中Runtime Attributes个别属性无效

2015/4/7 comments

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

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

如:layer.borderColor

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

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

1、自定义代码

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