2015-09-03 2 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-09-03 14: 28: 38,802 NewsApp [6801: 1954504] Не удалось установить (BorderColor) определенные пользователем досматриваемого собственности на (NewsApp.WhiteWithGreyTBBorderView): [setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого borderColor. 2015-09-03 14: 28: 38.803 NewsApp [6801: 1954504] Не удалось установить (borderWidth) определяемое пользователем свойство проверки (NewsApp.WhiteWithGreyTBBorderView): [setValue: forUndefinedKey:]: этот класс не является ключевым значением, совместимым с кодировкой для ключевого borderWidth.

Любая идея, что может быть неправильным?

ответ

1

При использовании раскадровки представление создается путем вызова init(coder aDecoder: NSCoder). Все, что вам нужно сделать, это позвонить addBehavior во всех методах инициализации :)
Таким образом, вы убедитесь, что ваш просмотр настроен правильно во всех случаях (при создании его из кода и из раскадровки). Вот так

Вы можете установить точки останова и увидеть, что init (frame : CGRect) не вызывается, когда вы создаете представление из раскадровки или xib.
:)

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

required init(coder aDecoder: NSCoder) { 
    super.init(coder: aDecoder) 
    addBehavior() 
} 
Смежные вопросы