更改故事板中的UIButton BorderColor

我在用户定义的运行时属性中为UIbutton设置了CornerRadius和BorderWidth。 没有添加layer.borderColor它的作品,以黑色显示边框。 但是当添加layer.borderColor不起作用(不显示边框)。

在这里输入图像说明

提前致谢。

对于Swift:

在这里输入图像说明

Swift 3:

extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } @IBInspectable var borderWidth: CGFloat { get { return layer.borderWidth } set { layer.borderWidth = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(cgColor: layer.borderColor!) } set { layer.borderColor = newValue?.cgColor } } } 

Swift 2.2:

 extension UIView { @IBInspectable var cornerRadius: CGFloat { get { return layer.cornerRadius } set { layer.cornerRadius = newValue layer.masksToBounds = newValue > 0 } } @IBInspectable var borderWidth: CGFloat { get { return layer.borderWidth } set { layer.borderWidth = newValue } } @IBInspectable var borderColor: UIColor? { get { return UIColor(CGColor: layer.borderColor!) } set { layer.borderColor = newValue?.CGColor } } } 

我得到答案更改layer.borderColor layer.borderColorFromUIColor

在这里输入图像说明

并在.m文件中添加代码

 #import <QuartzCore/QuartzCore.h> @implementation CALayer (Additions) - (void)setBorderColorFromUIColor:(UIColor *)color { self.borderColor = color.CGColor; } @end 

在属性检查器中勾选属性

属性检查器

这个解释,也许在这里的一些其他的答案中丢失了:

这个属性没有被设置的原因是layer.borderColor需要一个types为CGColor的值。

但是只有UIColortypes可以通过Interface Builder的用户定义的运行时属性来设置!

因此,您必须通过Interface Builder将UIColor设置为代理属性,然后拦截该调用以将等同的CGColor设置为layer.borderColor属性。

这可以通过在CALayer上创build一个类别,将关键path设置为一个独特的新属性( borderColorFromUIColor )以及覆盖相应设置器( setBorderColorFromUIColor:的类别来实现。

在Swift的情况下,function不起作用。 您将需要一个计算属性来实现所需的结果:

 extension CALayer { var borderColorFromUIColor: UIColor { get { return UIColor(CGColor: self.borderColor!) } set { self.borderColor = newValue.CGColor } } } 

这对我有用。 Swift 3,xCode 8.3

身份检查员(在这种情况下,UIButton

CALayer扩展:

 extension CALayer { var borderWidthIB: NSNumber { get { return NSNumber(value: Float(borderWidth)) } set { borderWidth = CGFloat(newValue.floatValue) } } var borderColorIB: UIColor? { get { return borderColor != nil ? UIColor(cgColor: borderColor!) : nil } set { borderColor = newValue?.cgColor } } var cornerRadiusIB: NSNumber { get { return NSNumber(value: Float(cornerRadius)) } set { cornerRadius = CGFloat(newValue.floatValue) } } 

}

Interesting Posts