Impossible de définir (cornerRadius) défini par l'utilisateur inspecté bien sur (UIView)
Détails
Je regardais la vidéo de Session 411 sur la WWDC 2014 se référant à "Ce qui est nouveau dans Interface Builder", et je cherche comment créer des Cadres pour faire @IBDesignable
classes pour la prévisualisation des changements dans le Storyboard, sans avoir à exécuter l'application.
@IBInspectable
propriétés sont montrant correctement quand je l'ai ajouter à ma classe spécifique à la vue et le rendu de la vue 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
}
}
}
Journal
J'ai remarqué que ces attributs ont été ajoutés sur Défini par l'Utilisateur Runtime Attributs (Sous Identité de l'Inspecteur). Maintenant ce que j'attends, c'est quand je lance le code de garder ces changements que j'ai fait avec un affichage spécifique.
Je lance l'application et le point de vue ne prend pas en charge la Défini par l'Utilisateur Runtime Attributs, et donne cette erreur sur la sortie (pas de plantage):
Unknown class MyClass in Interface Builder file
Failed to set (cornerRadius) user defined inspected property on (UIView)
Question
Ce qui est à l'origine de la demande de ne pas charger Défini par l'Utilisateur Runtime Attributs que j'ai ajouté en vertu de l' Identité de l'Inspecteur?
- autre chose serait la cause de votre problème, parce que ce code fonctionne parfaitement comme il devrait l'être – les valeurs sont conservées correctement quand je lance l'application. Je peux changer toutes les valeurs en vertu de la norme attributs de l'inspecteur en vertu de l'utilisateur défini exécution des attributs de section.
- c'est ce que je viens de dire: "les valeurs sont conservées correctement quand je lance l'application", et que tu viens de dire la même chose ", quand je lance l'application les attributs que j'ai ajouté sont travail correctement", je suis sûr au sujet de votre problème ici, peut-être? (btw, je n'ai reçu aucun message d'avertissement sur la console).
- Avez-vous ajouté QuartzCore cadre?
- J'ai supprimé le commentaire, car j'ai été incapable de modifier donc je suis en train d'écrire ici. J'ai ajouté les attributs de l'IB, mais ils ne sont pas en cours de chargement lorsque l'application est en cours d'exécution. C'est ce que je voulais dire.
- Je vous comprends, mais je confirme et j'ai testé votre code et compilé un projet, d'exécuter l'application, et les valeurs sont conservées. si vous souhaitez me créer une réponse détaillée ce que j'ai vécu avec l'ajout de captures d'écran, je peux le faire pour vous... mais brièvement, les valeurs que j'ai mis dans de l'IB sont conservés que pour la vue lors de l'exécution du projet.
- Interface Builder est un se plaindre que la classe associée à l'écran n'est pas disponible dans votre cible. MyClass.... Vouliez-vous dire pour le configurer comme "Mavue" ou est-ce une faute de frappe?
- J'ai supprimé Incorporé cadre et a ajouté un nouveau. Il a donné une erreur de compilation se plaindre sur iOS Cible de ce minimum doit être iOS 8.0 (le Mien était 7.0). Il fixe et fonctionne bien, mais donne aussi à la sortie de impossible de définir défini par l'utilisateur inspecté la propriété.
- Je ne sais pas je l'ai supprimé et a créé un nouveau cadre et que le problème a été résolu.
Vous devez vous connecter pour publier un commentaire.
Le code est correct.
Lorsque vous déclarez une
@ IBDesignable
tous les@IBInspectable
propriétés sont exposés à l'Interface Builder comme Défini par l'Utilisateur Runtime Attributs.Le problème -
Est le moyen que l'Interface Builder ne pouvais pas trouver un peu de classe. Vous avez mal réglé classe qui n'existe pas dans votre application.
Votre customView classe est
MyView
mais dans Interface Builder vous avezMyClass
Solution pour résoudre-
MyView
Aussi Si vous avez décidé de supprimer le client Personnalisable, vous devriez
Basé sur la question de titre, quelques personnes peut venir avec un problème légèrement différent (comme je l'ai fait). Si vous
Ensuite, vous pouvez obtenir un message d'erreur semblable à
La solution est de supprimer l'ancienne propriété.
Ouvrir l'Identité de l'inspecteur pour votre classe, sélectionnez le nom de la propriété en vertu de l'Utilisateur Défini Exécution des Attributs, et appuyez sur le bouton moins (-).
Encore une fois, ce n'est pas la réponse à la discussion de la question, mais il pourrait être la réponse à quelqu'un d'autre problème qui vient ici.
dans l'Identité de l'inspecteur ajouter Définis par l'utilisateur d'exécution des attributs
layer.cornerRadius
de type chaîne deaprès aller à l'Attribue inspecteur et sélectionnez "Clip des sous-vues"