2015-09-03 70 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() 
} 
相關問題