2009-10-28 9 views
5

Me pregunto si hay una forma de usar constantes en Interface Builder, para evitar configurar manualmente el mismo color en diferentes lugares, por ejemplo (podría ser un trabajo muy tedioso a veces ...)¿Cómo compartir constantes entre Interface Builder y el código?

Actualmente configuré el color en el código y use #define para configurar el color, pero obviamente IB no puede usar #define ...

Respuesta

-1

Creo que la manera más fácil de hacer esto sería crear una categoría en la clase UIColor y crear un método de clase en él. Por ejemplo:

colocar esto en un archivo de cabecera (por ejemplo UIColor + CustomColors.h):

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

colocar esto en un archivo de aplicación (por ejemplo UIColor + CustomColors.m)

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

Luego tiene acceso al método de clase en cualquier parte de su código como lo siguiente:

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

See Apple's documentation on Categories para más información.

O bien, puede guardar muestras de color a través de la paleta de colores del sistema. Para hacer esto, simplemente llama la paleta de colores del sistema, selecciona un color y arrástralo a la grilla de colores.

Estos colores están ahora disponibles no solo en todos los documentos de Interface Builder que crea, sino en cualquier aplicación que utilice la paleta de colores del sistema.

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

+0

Gracias por su respuesta. En realidad, me hubiera gustado establecer el color en IB, no en el código (lo que significa que quiero evitar self.backgroundColor = myColor). Pero si uso un color personalizado de la paleta de colores como lo mencionas, y si quiero modificar en el futuro el porcentaje de azul de mi color, por ejemplo, todavía tendría que hacer el cambio manualmente en IB en todos los colores personalizados. se usa ... Estoy guardando mi solución #define por el momento, me ahorra tedioso tiempo de refactorización ... – Unfalkster

0

que han trabajado alrededor de este problema creando una subclase de los diversos controles para garantizar el mismo estilo a lo largo de la aplicación. El inconveniente es que no se puede ver el estilo en el constructor de interfaces solo en un wireframe.

Por ejemplo, tengo una

@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; 
} 
Cuestiones relacionadas