繁体   English   中英

如何将情节提要UIView设置为视图的子类?

[英]How to set storyboard UIView to subclass of 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]无法在(NewsApp.WhiteWithGreyTBBorderView)上设置(borderColor)用户定义的检查属性:[setValue:forUndefinedKey:]:此类不适用于以下代码的键值关键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()
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM