2016-10-18 2 views
0

J'ai suivi le tutorial ici pour créer une vue inspectable et designable. Je veux juste ajouter la couleur de la bordure, la largeur de la bordure et la capacité de la bordure arrondie dans le UIView.Pourquoi les propriétés marquées @IBInspectable ne fonctionnent pas?

J'ai réussi à montrer les propriétés. Mais peu importe ce que j'ai mis sur le storyboard, le résultat est toujours comme s'ils n'étaient pas là. Il n'y a pas de bordure, même si j'ai défini la bordure comme 2 en largeur et en noir. Ce n'est pas affiché à la fois sur le storyboard et à l'exécution. J'ai mis la frontière à la largeur 2, mais à l'exécution, j'imprime la valeur de largeur de frontière à didViewLoad, et le résultat est 0. Ce qui pourrait être erroné?

@IBDesignable extension view: UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
     get { 
      return layer.cornerRadius 
     } 
     set { 
      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat { 
     get { 
      return layer.borderWidth; 
     } 
     set { 
      layer.borderWidth = borderWidth; 
     } 
    } 

    @IBInspectable var borderColor: UIColor? { 
     get { 
      return UIColor(CGColor: layer.borderColor!); 
     } 
     set { 
      layer.borderColor = borderColor?.CGColor 
     } 
    } 

} 

Et cela ne fonctionne pas non plus:

@IBDesignable class BOView: UIView { 

    @IBInspectable var cornerRadius: CGFloat { 
     get { 
      return layer.cornerRadius 
     } 
     set { 
      layer.cornerRadius = newValue 
      layer.masksToBounds = newValue > 0 
     } 
    } 

    @IBInspectable var borderWidth: CGFloat { 
     get { 
      return layer.borderWidth; 
     } 
     set { 
      layer.borderWidth = borderWidth; 
     } 
    } 

    @IBInspectable var borderColor: UIColor? { 
     get { 
      return UIColor(CGColor: layer.borderColor!); 
     } 
     set { 
      layer.borderColor = borderColor?.CGColor 
     } 
    } 

} 
+0

avez-vous tourné le menu '' Editor' ➜ Actualiser automatiquement Views' dans IB? – holex

+0

@holex cette option est déjà activée. –

+0

voir ce tutoriel: https://iosdevcenters.blogspot.com/2017/07/how-to-use-ibinspectable-in-swift-30.html –

Répondre

4

Essayez d'utiliser nouvelleValeur au lieu de la valeur réelle.

Par exemple,

@IBInspectable var borderWidth: CGFloat { 
    get { 
     return layer.borderWidth 
    } 
    set { 
     layer.borderWidth = newValue 
    } 
} 

Chen, je préfère la façon dont vous le faites, mais notez aussi que ce que vous essayez de faire est possible de Storyboard directement sans utiliser IBDesignable. Vous pouvez définir les propriétés de la couche dans les attributs d'exécution définis par l'utilisateur.

enter image description here

+0

Avez-vous vérifié cette réponse avant de l'envoyer? est-ce que ça marche? – holex

+0

@holex oui je l'ai fait, et cela fonctionne –

+0

Ooooooooh c'est ce que c'est! Oui, j'ai besoin d'utiliser 'newValue' au lieu du nom de la variable. Merci!!!! Mais l'IBDesignable ne fonctionne toujours pas ... mais c'est un grand bond !! –