web-dev-qa-db-ja.com

UIColor定数を定義するObjective C

テーマ用にいくつかのカスタム定義の色を使用したiPhoneアプリケーションがあります。これらの色はUIで修正されるため、含めるクラス(Constants.hおよびConstants.m)で色を定義します。それ、どうやったら出来るの? (UIColorsは変更可能であり、エラーを引き起こすため、単純に定義しても機能しません-Initalizerが一定ではありません)。

/* Constants.h */
extern UIColor *test;

/* Constants.m */
UIColor *test = [UIColor colorWithRed:1.0 green:1.0 blue:1.0 alpha:1.0];

ありがとう!

28
futureelite7

UIColorは変更できません。私は通常、色、フォント、画像を使用してこれを行います。シングルトンを使用するように簡単に変更したり、静的イニシャライザを使用したりできます。

@interface UIColor (MyProject)

+(UIColor *) colorForSomePurpose;

@end

@implementation UIColor (MyProject)

+(UIColor *) colorForSomePurpose { return [UIColor colorWithRed:0.6 green:0.8 blue:1.0 alpha:1.0]; }

@end
47
drawnonward

簡単にするために、これを行いました:

/* Constants.h */
#define myColor [UIColor colorWithRed:255.0/255.0 green:255.0/255.0 blue:255.0/255.0 alpha:1.0]

「;」を省略することを忘れないでください。通常の式として使用できます。

このアプローチに技術的に何か問題があるかどうかはわかりませんが、うまく機能し、コンパイル時の定数初期化エラーを回避します-このコードは、「myColor」を配置した場所に効果的にスタックしているため、取得できません実際に使用するまでコンパイルされます。

30
Fateh Khalsa

別のオプション

あなたの.hではあなたがすることができます

extern UIColor *  const COLOR_LIGHT_BLUE;

あなたの.mmであなたはできる

UIColor* const COLOR_LIGHT_BLUE = [[UIColor alloc] initWithRed:21.0f/255 green:180.0f/255  blue:1 alpha:1];//;#15B4FF
14
yeahdixon

あなたが拡張機能のない速くて汚いものを探しているなら、 clang を使ってください:

#define kGreenColor colorWithRed:(0/255.0) green:(213/255.0) blue:(90/255.0) alpha:1.0

- (void)doSomething
{
   _label.textColor = [UIColor kGreenColor];

}
3
AmitP

多くの場合、ユーザーはグローバル定数をシングルトンオブジェクトに入れます-または、描かれているように、いくつかのクラスのクラスメソッドを介してそれらにアクセスできるようにすることができます。

ここに別の方法があります:

ヘッダ:

#if !defined(COLORS_EXTERN)
    #define COLORS_EXTERN extern
#endif

COLORS_EXTERN UIColor *aGlobalColor;

実装:

#define COLORS_EXTERN
#import "GlobalColors.h"


@interface GlobalColors : NSObject
@end

@implementation GlobalColors

+ (void)load
{
    aGlobalColor = [UIColor colorWithRed:0.2 green:0.3 blue:0.4 alpha:1];
}

@end

少しハックですが、実装で色を再定義する必要はなく、メソッドを呼び出さなくても色にアクセスできます。

0
goetz