在之前的项目中,我在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]
现在由于某种原因,当我将此代码放在一个新项目中时,只有特定的类可以看到该函数,但是子类没有看到它。
如何使此功能全局可用?
答案 0 :(得分:7)
您可以在项目的.pch
文件中定义宏,但这通常是个坏主意,因为它会生成难以阅读,维护和调试的代码。
在您的具体情况下,我宁愿在UIColor
上创建一个类别。
这是一个带有额外内容的实现,可能会派上用场。
#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
#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];
答案 1 :(得分:2)
如果您将文件添加到YOURPROJECTNAME-Prefix.pch,它将被添加为预编译的标头,并且可用于所有代码文件。
答案 2 :(得分:0)
Audun Kjelstrup有最好的答案。
您还可以选择在类中设置静态方法。
+ (UIColor *)UIColorFromRGB {}
答案 3 :(得分:0)
我同意Gabriele关于宏(不合需要的功能)以及你想要做的事情在一个类别中会很好/适当。但是,我还想指出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];
}