Comment définir des valeurs par défaut pour IBInspectable en Objective-C?
Je sais que les valeurs par défaut de IBInspectable-propriétés peuvent être définies comme:
@IBInspectable var propertyName:propertyType = defaultValue
en Swift. Mais comment puis-je obtenir un effet similaire en Objective-C, de sorte que je peux avoir la valeur par défaut de certains biens mis quelque chose dans Interface Builder?
- Avez-vous jamais obtenir une solution pour cela?
- non, malheureusement pas. J'ai commencé à penser qu'il n'est pas possible, IB Inspectables sont une nouvelle fonctionnalité qui est sorti en même temps avec Swift, qui prend en charge les valeurs par défaut. Depuis ObjC ne prend pas en charge les valeurs par défaut, et depuis il est extrêmement improbable qu'Apple pour ajouter cette fonctionnalité à ObjC, je doute fortement qu'il est possible. Ils pourraient ajouter un Xcode macro (par exemple, quelque chose comme IBDefaultValue), mais il serait de soutenir un héritage de la langue, qui, je pense, Apple serait en contre.
- OK, merci pour la réponse 😀 Retour à l'ancienne méthode pour moi alors. Ennuyeux que vous aussi vous ne pouvez pas mettre
UIFont
comme un IBInspectable type. J'aurais pensé que c'était impossible étant donné queUILabel
a elle. Oh bien 🙂 - ouais, il est extrêmement ennuyeux, cependant je pense qu'il aura le soutien de plusieurs types (en vous regardant, les enums!) et des fonctionnalités par le temps. Si vous souhaitez ajouter une "police" de la propriété, ont un oeil à ceci: github.com/can16358p/CPTutorial/blob/master/CPTutorialBalloon.m (aller à la ligne 212) C'est une petite bibliothèque que j'ai écrit et qui accepte un nom de police dans Interface Builder et il peut résoudre dynamiquement le nom de la police de la chaîne à une véritable police de l'IB et l'exécution. N'hésitez pas à copier à votre projet si cela aide.
- Bien, merci! Prenons un coup d'oeil maintenant.
- Classé comme un bug à un moment de retour: openradar.me/19044397 et de fermeture du reproductible/dupe Dupe... maître ne semble pas être sur OpenRadar.
Vous devez vous connecter pour publier un commentaire.
Depuis
IBInspectable
valeurs sont définies aprèsinitWithCoder:
et avantawakeFromNib:
, vous pouvez définir les valeurs par défaut dansinitWithCoder:
méthode.initWithCoder:
et ne pouvais pas comprendre pourquoi ils étaient tous nuls. Maintenant, je place mon contrôle personnalisé dansawakeFromNib
et tout va bien. Merci!- (void)prepareForInterfaceBuilder
qui va utiliser le inspectable valeurs pour rendre les chosesJ'ai écrit mon code comme ceci. Il fonctionne assez bien pour moi, à la fois lors de la conception de l'interface builder ou l'exécution d'une application.
Je suis en utilisant comme ça
si
propertyNameValue
anil
,propertyName
sera de retourdefaultValue
.Pourquoi ne pas utiliser la macro tels que:
???
La
prepareForInterfaceBuilder
sélecteur peut également vous aider à mettre en œuvre de l'IB code spécifique.Plus d'infos sur ces 2 points, ici:
https://developer.apple.com/library/ios/recipes/xcode_help-IB_objects_media/chapters/CreatingaLiveViewofaCustomObject.html
prepareForInterfaceBuilder
méthode.Tout d'abord j'ai essayé de remplacer les getter et fait quelque chose comme ceci:
Mais dans ce cas, j'ai reçu question sur identificateur non déclaré
_borderColor
.Ok, j'ai essayé d'éviter cette question par le biais de la coutume de lecture.
En fait c'est pas un bon getter, nous n'avons pas de point de cette méthode en tant que méthode de lecture. Dans le cas où on point de, nous allons recevoir problème sur identificateur non déclaré, c'est pourquoi nous ne sera pas.
Ensuite, nous utilisons cette méthode pour obtenir la valeur de la propriété updateUI méthode.
Nous avons aussi pour remplacer setter: