1

前のプロジェクトでは、この関数を AppDeligate.m で定義し、アプリのすべての部分でグローバルに使用できるようにしました。

#define UIColorFromRGB(rgbValue) [UIColor \
colorWithRed:((float)((rgbValue & 0xFF0000) >> 16))/255.0 \
green:((float)((rgbValue & 0xFF00) >> 8))/255.0 \
blue:((float)(rgbValue & 0xFF))/255.0 alpha:1.0]

何らかの理由で、このコードを新しいプロジェクトに配置すると、特定のクラスだけが関数を見ることができますが、子クラスには見えません。

この機能をグローバルに利用できるようにするにはどうすればよいですか?

4

4 に答える 4

7

プロジェクトのファイルでマクロを定義できます.pchが、読み取り、保守、およびデバッグが困難なコードが生成されるため、一般的にはお勧めできません。

あなたの特定のケースでは、にカテゴリを作成したいと思いますUIColor

これは、便利な追加のものを含む実装です。

UIColor+Extra.h

#import <UIKit/UIKit.h>

@interface UIColor (Extra)
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue;
+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha;
+ (instancetype)extra_colorWithHex:(NSInteger)hex;

@end

UIColor+Extra.m

#import "UIColor+Extra.h"

@implementation UIColor (Extra)

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue {
    return [self colorWith255BasedRed:red green:green blue:blue alpha:1.0];
}

+ (instancetype)extra_colorWith255BasedRed:(NSUInteger)red green:(NSUInteger)green blue:(NSUInteger)blue alpha:(CGFloat)alpha {
    return [self colorWithRed:red/255.0f green:green/255.0f blue:blue/255.0f alpha:alpha];
}

+ (instancetype)extra_colorWithHex:(NSInteger)hex {
    return [UIColor colorWith255BasedRed:((hex & 0xFF0000) >> 16) green:((hex & 0xFF00) >> 8) blue:(hex & 0xFF)];
}

@end

あとは置くだけ

#import "UIColor+Extra.h"

あなたの.pchファイルに入れ、他の場所で使用してください。

UIColor * cyan = [UIColor extra_colorWithHex:0x00FFFF];
UIColor * magenta = [UIColor extra_colorWith255BasedRed:255 green:0 blue:255];
于 2013-08-21T10:59:43.673 に答える
2

ファイルを YOURPROJECTNAME-Prefix.pch に追加すると、プリコンパイル済みヘッダーとして追加され、すべてのコード ファイルで使用できるようになります。

于 2013-08-21T10:52:13.883 に答える
0

マクロ (関数としては望ましくない) についてガブリエレに同意します。ただし、Objective-C は C スタイルの機能も実行できることも指摘したいと思います (あなたが示したマクロとは対照的に)。

例えば:

// Header
UIColor * UIColorFromRGB(NSInteger rgbValue);

// Implementation
UIColor * UIColorFromRGB(NSInteger rgbValue)
{
    return [UIColor colorWithRed: ((float)((rgbValue & 0xFF0000) >> 16))/255.0
                           green: ((float)((rgbValue & 0xFF00) >> 8))/255.0 \
                            blue: ((float)(rgbValue & 0xFF))/255.0 alpha:1.0];
}
于 2013-08-21T14:19:49.217 に答える