我已经添加了一个UIView的子类:
class WhiteWithGreyTBBorderView: UIView {
override init (frame : CGRect) {
super.init(frame : frame)
addBehavior()
}
convenience init () {
self.init(frame:CGRectZero)
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
func addBehavior (){
backgroundColor = UIColor.blackColor()
addTopBorderWithColor(UIColor.blackColor(), width: 5)
}
}
然后我有一个ViewExtension:
extension UIView {
func addTopBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.CGColor
border.frame = CGRectMake(0, 0, self.frame.size.width, width)
self.layer.addSublayer(border)
}
func addRightBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.CGColor
border.frame = CGRectMake(self.frame.size.width - width, 0, width, self.frame.size.height)
self.layer.addSublayer(border)
}
func addBottomBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.CGColor
border.frame = CGRectMake(0, self.frame.size.height - width, self.frame.size.width, width)
self.layer.addSublayer(border)
}
func addLeftBorderWithColor(color: UIColor, width: CGFloat) {
let border = CALayer()
border.backgroundColor = color.CGColor
border.frame = CGRectMake(0, 0, width, self.frame.size.height)
self.layer.addSublayer(border)
}
}
我添加了一个UIView到我的故事板,并设置类为WhiteWithGreyTBBorderView。它仍然是白色而不是黑色,在控制台我得到:
2015-09-03 14:28:38.802 NewsApp[6801:1954504] Failed to set (borderColor) user defined checked property on (NewsApp. whitewithgreytbborderview): [setValue:forUndefinedKey:]:这个类不是key value - code -compliant for key borderColor。2015-09-03 14:28:38.803 NewsApp[6801:1954504]在(NewsApp. whitewithgreytbborderview)上设置(borderWidth)用户定义的已检查属性失败:[setValue:forUndefinedKey:]:这个类不符合关键字borderWidth的键值编码。
你知道怎么回事吗?
当您使用Storyboard时,视图是通过调用init(coder aDecoder: NSCoder)
创建的。你只需要在所有init方法中调用addBehavior
:)
这样你就可以确保你的视图在所有情况下都是正确配置的(当你从代码和故事板中创建它时)。这就是
你可以设置一个断点,当你从Storyboard或xib实例化一个视图时,init (frame : CGRect)
不会被调用。:)
convenience init () {
self.init(frame:CGRectZero)
addBehavior()
}
required init(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
addBehavior()
}