web-dev-qa-db-fra.com

Impossible de définir (cornerRadius) la propriété inspectée définie par l'utilisateur sur (UIView)

Détails

Je regardais la vidéo de Session 411 sur WWDC 2014 faisant référence à " Nouveautés de Interface Builder ", et j'essayais de créer des cadres pour créer des classes @IBDesignable afin de prévisualiser mes modifications dans Storyboard. sans avoir à exécuter l'application.

Les propriétés @IBInspectable s'affichent correctement lorsque j'ajoute ma classe à une vue spécifique et le rendent correctement avec le code ci-dessous:

Code

@IBDesignable
class MyView: UIView {
    @IBInspectable var borderColor: UIColor = UIColor.clearColor() {
        didSet {
            layer.borderColor = borderColor.CGColor
        }
    }

    @IBInspectable var borderWidth: CGFloat = 0 {
        didSet {
            layer.borderWidth = borderWidth
        }
    }

    @IBInspectable var cornerRadius: CGFloat = 0 {
        didSet {
            layer.cornerRadius = cornerRadius
        }
    }

    @IBInspectable var masksToBounds: Bool = false {
        didSet {
            layer.masksToBounds = masksToBounds
        }
    }
}

Bûche

J'ai remarqué que ces attributs étaient ajoutés à Attributs d'exécution définis par l'utilisateur (Sous Inspecteur d'identité ). Maintenant, ce à quoi je m'attends, c'est lorsque je lance le code pour conserver ces modifications que j'ai apportées avec une vue spécifique.

J'exécute l'application et la vue ne charge pas le Attributs d'exécution définis par l'utilisateur , et donne cette erreur en sortie (ne plante pas):

Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)

Question

Qu'est-ce qui empêche l'application de charger Attributs d'exécution définis par l'utilisateur que j'ai ajoutés sous Inspecteur d'identité ?

28
EridB

Le code est correct.
Lorsque vous déclarez un @ IBDesignable, toutes les propriétés @IBInspectable sont exposées au Générateur d'interface en tant qu'attributs d'exécution définis par l'utilisateur. 

Le problème

Classe inconnue MyClass dans le fichier Interface Builder

Cela signifie qu'Interface Builder n'a pas pu trouver de classe. Vous avez défini le mauvais class qui n'existe pas dans votre application.
Votre classe customView estMyViewmais vous avezMyClassdans Interface Builder

enter image description here

Solution à résoudre

  • Définissez la classe correcte dans l'interface Builder, dans votre cas MyView
  • Vérifiez Designable status. Ce devrait être Up to date, si ce n’est que quelque chose ne va pas. 

enter image description here

Aussi Si vous avez décidé de retirer le client Designable, vous devriez

  • Supprimer la classe personnalisée
  • Supprimer les attributs d'exécution définis par l'utilisateur

enter image description here

40
Kostiantyn Koval

Selon le titre de la question, quelques personnes peuvent venir ici avec un problème légèrement différent (comme je l'ai fait). Si vous

  • a ajouté un @IBInspectible 
  • puis supprimé dans le code

Ensuite, vous pouvez également obtenir une erreur similaire à 

Échec de la définition (xxx) de la propriété inspectée définie par l'utilisateur sur [Votre Custom View] ...: cette classe n'est pas compatible avec le codage des valeurs de clé pour la clé [xxx].

La solution consiste à supprimer l'ancienne propriété.

 enter image description here

Ouvrez l'inspecteur d'identité de votre classe, sélectionnez le nom de la propriété sous Attributs d'exécution définis par l'utilisateur, puis appuyez sur le bouton Moins (-).

Encore une fois, ce n'est pas la réponse à la question du PO, mais c'est peut-être la réponse au problème de quelqu'un d'autre qui vient ici.

22
Suragch