如何将storyboard UIView设置为view的子类



我已经添加了一个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()
}

最新更新