![](/img/trans.png)
[英]How to set an UIView subclass from a framework as a storyboard custom class?
[英]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.