2015-10-14 1 views
1

Je donne les résultats suivants:Impossible de concevoir sous-vue mon avis @IBDesignable

@IBDesignable class CustomView: UIView { 

    @IBInspectable var hasFlag: Bool = true 

    var flagView: UIView? 

    override init(frame: frame) { 

     super.init(frame) 

     setup() 

    } 

    required init?(coder aDecoder: NSCoder) { 

     super.init(coder: aDecoder) 

     setup() 

    } 

    func setup() { 

     if (hasFlag) { 

      flagView = UIView() 

      flagView!.translatesAutoresizingMaskIntoConstraints = false 

      flagView!.backgroundColor = UIColor.redColor() 


      addSubview(flagView!) 

      flagView!.leadingAnchor.constraintEqualToAnchor(leadingAnchor, constant: 0).active = true 

      flagView!.topAnchor.constraintEqualToAnchor(topAnchor, constant: 0).active = true 

      flagView!.widthAnchor.constraintEqualToConstant(8).active = true 

      flagView!.bottomAnchor.constraintEqualToAnchor(bottomAnchor, constant: 0).active = true 

     } 

    } 

} 

Cependant, quand je vais dans le constructeur d'interface, je vois là mon drapeau rouge, mais je n'ai pas la possibilité de choisir le flagView pour, disons, définir sa couleur de fond. Je ne le vois pas non plus apparaître dans la hiérarchie de vue sous mon CustomView. Je vais avoir plusieurs CustomViews, et chacun pourrait avoir une couleur différente. Je voudrais faire cela dans le constructeur de l'interface plutôt que dans le code. Existe-t-il un moyen d'éditer ma sous-vue de mon @IBDesignable via le constructeur d'interface?

+0

Vous devez créer une propriété IBInspectable pour chaque propriété que vous souhaitez modifier. UIViews a déjà ceci dans IB mais vous ne devriez pas avoir à créer le vôtre. – soulshined

+0

Je peux modifier toutes les propriétés UIView normales dans le constructeur d'interface pour mon CustomView, mais je ne peux pas sélectionner mon flagView dans le constructeur d'interface et modifier ses propriétés d'affichage. J'ai essayé 'flag @IBInspectable var: UIView?' Et 'flag @IBDesignable: UIView?' Et aucun travaillé. – user2320861

+0

Votre sous-classe UIView, afin de définir l'UIView dans le storyboard, vous nommez la classe 'CustomView'. Mais vous n'avez pas besoin d'ajouter des propriétés IB car c'est une sous-classe de UIView qui en hérite déjà. Je suppose que vous n'ajoutez pas de UIView à votre storyboard et que vous le sous-classez dans la classe CustomView – soulshined

Répondre

0

Vous pouvez essayer "setup()" dans layoutSubviews.

override func layoutSubviews() { 
    super.layoutSubviews() 
    setup() 
}