2015-09-03 66 views
0

我添加的UIView的一个子类:如何将故事板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年9月3日14:28:38.802 NewsApp [6801:1954504]无法设置(BORDERCOLOR)用户定义的视察物业(NewsApp.WhiteWithGreyTBBorderView ):[setValue:forUndefinedKey:]:该类不是关键字borderColor的编码兼容密钥值。 2015-09-03 14:28:38.803 NewsApp [6801:1954504]未能在(NewsApp.WhiteWithGreyTBBorderView)上设置(borderWidth)用户定义的检查属性:[setValue:forUndefinedKey:]:此类不是关键值编码兼容为关键borderWidth。

任何想法什么可能是错的?

回答

1

当您使用Storyboard时,视图通过调用init(coder aDecoder: NSCoder)创建。所有你需要做的就是在所有初始化方法中调用addBehavior:)
这样你就可以确保你的视图在所有情况下都能正确配置(当你从代码和故事板创建它时)。就是这样

您可以设置一个断点,并在从Storyboard或xib实例化视图时看到init (frame : CGRect)未被调用。
:)

convenience init() { 
    self.init(frame:CGRectZero) 
    addBehavior() 
} 

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    addBehavior() 
} 
相关问题