2009-10-28 4 views
5

인터페이스 빌더에서 상수를 사용하는 방법이 있는지 궁금해합니다. 예를 들어 다른 장소에서 수동으로 같은 색상을 설정하는 것을 피하기 위해 (때로는 매우 지루한 작업 일 수 있습니다 ...)Interface Builder와 코드간에 상수를 공유하는 방법은 무엇입니까?

현재 코드에서 색상을 사용하고 #define을 사용하여 색상을 설정하지만 분명히 IB는 #define을 사용할 수 없습니다.

답변

-1

나는이 작업을 수행하는 가장 쉬운 방법은 UIColor 클래스에 범주를 만들고 그것에 대한 클래스 메소드.

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

찾는 구현 파일이 (예 UIColor + CustomColors.m)

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

: 헤더 파일 (예 UIColor + CustomColors.h)에

찾는이 예를 들어 그런 다음 코드의 어디에서나 클래스 메서드에 액세스 할 수 있습니다.

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

자세한 내용은을 참조하십시오.

또는 시스템 색상 표를 통해 색상 견본을 저장할 수 있습니다. 이렇게하려면 단순히 시스템 색상 표를 불러 와서 색상을 선택하고 색상 표에 끌어 놓습니다.

이 색상은 작성한 모든 Interface Builder 문서에서 사용할 수 있지만 시스템 색상 표를 사용하는 모든 응용 프로그램에서 사용할 수 있습니다.

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

+0

감사합니다. 사실, 나는 코드에서가 아니라 IB에서 색상을 설정하고자했을 것입니다. 즉, self.backgroundColor = myColor를 피하려고합니다. 그러나 만약 당신이 그것을 언급하면서 컬러 팔레트의 커스텀 컬러를 사용한다면, 예를 들어 내 컬러의 푸른 색 백분율을 미래에 수정하고 싶다면, IB에서 수동으로 변경을 수동으로해야 할 것입니다. 사용됩니다 ... 저는 #define 솔루션을 잠시 동안 지키고 있습니다, 그것은 지루한 리팩토링 시간을 절약 해줍니다 .... – Unfalkster

0

나는 응용 프로그램 전반에 걸쳐 같은 스타일을 보장하기 위해 다양한 컨트롤을 서브 클래스에 의해이 문제를 해결 일했다. 단점은 인터페이스 빌더의 스타일을 와이어 프레임으로 만 볼 수 없다는 것입니다. 당신이 대답을

예를 들어 나는

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