2009-10-28 16 views
5

Zastanawiam się, czy istnieje sposób na użycie stałych w programie Interface Builder, aby uniknąć ręcznego ustawiania tego samego koloru w różnych miejscach na przykład (może to być bardzo żmudna praca czasami ...)Jak udostępnić stałe między konstruktorem interfejsów a kodem?

Obecnie ustawiam kolor w kodzie i użyj #define do ustawienia koloru, ale oczywiście IB nie może użyć #define ...

Odpowiedz

-1

Myślę, że najłatwiej to zrobić, to stworzyć kategorię w klasie UIColor i stworzyć metoda klasy na nim. Na przykład:

umieszczaj w pliku nagłówka (np UIColor + CustomColors.h):

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

Place to w pliku wdrażania (np UIColor + CustomColors.m)

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

Następnie masz dostęp do metody klasy w dowolnym miejscu kodu:

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

Zobacz Apple's documentation on Categories, aby uzyskać więcej informacji.

Można również zapisać próbki kolorów za pomocą palety kolorów systemowych. Aby to zrobić, po prostu wywołaj paletę kolorów systemu, wybierz kolor i przeciągnij go do siatki kolorów.

Te kolory są teraz dostępne nie tylko w każdym stworzonym dokumencie programu Interface Builder, ale także w dowolnej aplikacji korzystającej z systemowej palety kolorów.

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

+0

Dzięki Ci odpowiedzieć. Właściwie chciałbym ustawić kolor w IB, a nie w kodzie (co oznacza, że ​​chcę uniknąć self.backgroundColor = myColor). Ale jeśli użyję niestandardowego koloru z palety kolorów, o czym wspomniałeś, i jeśli chcę zmienić w przyszłości procent niebieskiego mojego koloru, na przykład, nadal będę musiał ręcznie zmienić w IB wszędzie kolor niestandardowy jest używany ... Na razie trzymam moje rozwiązanie #define, oszczędza mi to żmudnego czasu refaktoryzacji .... – Unfalkster

0

Pracowałem wokół tego problemu przez instacji różne kontrole, aby zapewnić ten sam styl w całej aplikacji. Wadą jest to, że nie można zobaczyć stylu w konstruktorze interfejsów tylko szkieletu.

Na przykład mam

@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; 
} 
Powiązane problemy