2009-10-28 5 views
5

Je me demande s'il existe un moyen d'utiliser des constantes dans Interface Builder, pour éviter de définir manuellement la même couleur à différents endroits par exemple (cela peut être un travail très fastidieux parfois ...)Comment partager des constantes entre Interface Builder et le code?

la couleur dans le code et l'utilisation de #define pour configurer la couleur, mais évidemment IB ne peut pas utiliser #define ...

Répondre

-1

Je pense que la façon la plus simple de le faire serait de créer une catégorie sur la classe UIColor et de créer une méthode de classe dessus. Par exemple:

Placez ce fichier dans un en-tête (par exemple UIColor + CustomColors.h):

@interface UIColor (CustomColors) 
+ (UIColor *)myCustomColor; 
@end 

Placez ce dans un fichier de mise en œuvre (par exemple UIColor + CustomColors.m)

@implementation UIColor (CustomColors) 
+ (UIColor *)myCustomColor 
{ 
    return [UIColor colorWithRed:0.2 green:0.5 blue:0.2 alpha:1.0]; 
} 
@end 

Ensuite, vous avez accès à la méthode de classe n'importe où dans votre code comme suit:

... 
self.view.backgroundColor = [UIColor myCustomColor]; 
... 

Voir Apple's documentation on Categories pour plus d'informations.

Vous pouvez également enregistrer des nuances de couleur dans la palette de couleurs du système. Pour ce faire, il vous suffit d'appeler la palette de couleurs du système, de sélectionner une couleur et de la faire glisser dans la grille de couleurs.

Ces couleurs sont désormais disponibles non seulement dans tous les documents Interface Builder que vous créez, mais dans toute application utilisant la palette de couleurs du système.

color palette http://img.skitch.com/20091030-dhh3tnfw5d8hkynyr7e5q3amwg.png

+0

Merci pour votre réponse. En fait, j'aurais aimé définir la couleur dans IB, pas dans le code (ce qui signifie que je veux éviter self.backgroundColor = myColor). Mais si j'utilise une couleur personnalisée de la palette de couleurs comme vous le mentionnez, et si je veux modifier à l'avenir le pourcentage de bleu de ma couleur par exemple, je devrais toujours faire le changement manuellement dans IB partout la couleur personnalisée est utilisé ... Je garde ma solution #define pour le moment, cela me permet d'économiser du temps de refactoring ... – Unfalkster

0

Je travaille autour de cette question par les différents contrôles sous-classement pour assurer le même style tout au long de l'application. L'inconvénient est que vous ne pouvez pas voir le style dans l'interface constructeur seulement un fil de fer.

Par exemple, j'ai un

@interface MyButton : UIButton 
@end 


@implementation MyButton 

-(void) initialize{ 
self.backgroundColor = [UIColor MyButonColor]; // Using a category on UIColor 
} 

- (id)initWithFrame:(CGRect)frame{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [self initialize]; 
    } 
    return self; 
} 

- (id)initWithCoder:(NSCoder *)decoder { 
    if (self = [super initWithCoder:decoder]) { 
     [self initialize]; 
    } 
    return self; 
} 
Questions connexes