2010-05-09 2 views
0

Venant du monde .NET pour le développement d'ObjC et de l'iPhone, j'ai l'habitude de fournir un support de conception pour mes classes d'interface utilisateur. Par exemple, disons que j'ai une classe de boutons personnalisés avec une propriété de couleur. Je veux être en mesure de définir cette couleur en temps de conception à partir de IB. Comment puis-je accomplir cela? Est-ce même possible? Vaut la peine?Propriétés de la conception dans IB?

+0

Je suppose que la réponse est «non»? – Krumelur

Répondre

2

Il n'est pas possible de créer des plug-ins IB personnalisés pour iOS. Le mieux que vous pouvez faire est d'utiliser un générique UIView avec une classe personnalisée dans votre plume et définir les propriétés par programmation.

0

C'est en fait très facile à faire. Dans InterfaceBuilder, sélectionnez le bouton et ouvrez l'inspecteur d'attributs (raccourci clavier: [commande] + 1). Sélectionnez le premier onglet en haut de la fenêtre de l'inspecteur d'attributs et regardez la section intitulée «View». L'entrée marquée "Arrière-plan" aura un rectangle de couleur à côté de lui, qui sera probablement divisé en diagonale, moitié noir et moitié blanc. C'est une indication que l'arrière-plan du bouton est actuellement transparent. Cliquez sur ce rectangle, et la boîte de sélection de couleur apparaîtra. N'oubliez pas de changer la valeur du curseur "alpha" dans la case de sélection des couleurs, sinon le bouton restera complètement transparent.

Here's an image of the attribute inspector, configured like I described.

+0

En fait, ma question était plus sur s'il est possible de créer de * nouvelles * propriétés au moment du design. – Krumelur

+0

@Krumelur Les propriétés de temps de conception ne sont pas disponibles * pour autant que je sache *. La plupart du temps, quand quelqu'un veut faire quelque chose comme ça dans Objective-C, il cherche à sous-classer l'objet avec lequel il veut jouer.C'est un peu plus de travail, mais c'est juste la façon dont la plateforme a été mise en place. –

1

Vous créez généralement un IBPlugin pour cela, qui peut contenir un seul élément personnalisé ou une collection entière.

Interface Builder Plug-In Programming Guide (Guide officiel)

Custom views in Interface Builder using IBPlugins (inofficial Tutorial)
(! Ce tutoriel devrait vous permettre de continuer Il couvre attributs personnalisés paramètres dans IB.)

Attention cependant: Xcode 4 does not support custom built IBPlugins!
(Et malheureusement, cela reste vrai pour Gold Master.) Espérons qu'il y aura une solution officielle/native une fois que la NDA sera levée, alors assurez-vous de sauvegarder votre IB avant d'installer une copie de Xcode 4.)

+1

Il existe une autre option: Interface Builder fournit des attributs d'exécution définis par l'utilisateur. Lors du chargement du fichier nib, ces attributs sont définis en envoyant '-setValue: forKey:', qui invoque les méthodes de définition de propriété correspondantes. Cependant, Interface Builder autorise un ensemble limité de types pour les attributs d'exécution, à savoir booléen, nombre, chaîne et 'nil'. –

0

Pour les types arbitraires (comme une propriété NSColor), les plugins Interface Builder sont votre seule option, comme d'autres l'ont mentionné.

Cependant, pour certains types limités, il existe une solution plus simple. Si votre propriété personnalisée est une chaîne, une primitive numérique ou un booléen, vous pouvez utiliser l'inspecteur "Runtime Attributes" dans Interface Builder pour définir ces propriétés lors de la conception.

Cependant, je vois que vous avez le tag 'iphone' sur votre questoin. Les attributs d'exécution ne sont actuellement pas disponibles sur iOS.

1

En attendant que la fonction 'Attributs d'exécution définis par l'utilisateur' soit plus largement prise en charge, vous pouvez toujours utiliser la propriété 'tag' de UIView. C'est juste un entier, mais vous pouvez l'utiliser comme une clé dans un dictionnaire pour accéder à des propriétés supplémentaires. Par exemple, définissez vos attributs au moment de la conception dans un fichier JSON, chargez-le dans un NSDictionary et parcourez la hiérarchie de la vue lors de l'exécution, en appliquant les attributs que vous avez définis.

Ce n'est pas idéal mais mieux que rien, ou mettre en œuvre des charges de minuscules classes personnalisées juste pour utiliser une police personnalisée ou autre.

+0

Les balises sont en effet très utiles. Solution intéressante avec le stockage des attributs en tant que ressources JSON. – Krumelur

Questions connexes