我有UIColor
的以下类别扩展名:
·H
#import <UIKit/UIKit.h>
@interface UIColor (Colors)
- (NSArray *)reds;
@end
的.m
#import "UIColor+Colors.h"
@implementation UIColor (Colors)
- (NSArray *)reds {
return [[NSArray alloc] initWithObjects:[UIColor colorWithRed:1.0/255.0 green:50.0/255.0 blue:98.0/255.0 alpha:1],[UIColor colorWithRed:1.0/255.0f green:37.0f/255.0f blue:75.0f/255.0f alpha:1],[UIColor colorWithRed:1.0/255.0 green:1.0/255.0 blue:52.0/255.0 alpha:1],[UIColor colorWithRed:90.0/255.0 green:13.0/255.0 blue:1.0/255.0 alpha:1],[UIColor colorWithRed:53.0/255.0 green:6.0/255.0 blue:1.0/255.0 alpha:1], nil];
}
@end
然后在一个视图控制器中,我试图做这样的事情:[cell setBackgroundColor:[UIColor reds][0]];
知道我做错了吗?
答案 0 :(得分:6)
我认为最可能的问题是函数reds
需要是一个类方法,以便您能够在类上调用reds
。所以像这样:
·H
@interface UIColor (Colors)
+(NSArray *)reds;
@end
的.m
@implementation UIColor (Colors)
+(NSArray *)reds {
return @[[UIColor colorWithRed:1.0/255.0 green:50.0/255.0 blue:98.0/255.0 alpha:1],
[UIColor colorWithRed:1.0/255.0f green:37.0f/255.0f blue:75.0f/255.0f alpha:1],
[UIColor colorWithRed:1.0/255.0 green:1.0/255.0 blue:52.0/255.0 alpha:1],
[UIColor colorWithRed:90.0/255.0 green:13.0/255.0 blue:1.0/255.0 alpha:1],
[UIColor colorWithRed:53.0/255.0 green:6.0/255.0 blue:1.0/255.0 alpha:1]];
}
@end
所以基本上是+
而不是-
。如果使用-
,则它是一个实例方法,因此您必须实例化UIColor实例以调用reds
。
答案 1 :(得分:1)
正如其他人所指出的那样,你想要创建一个类方法(定义以“+”开头的方法)而不是实例方法。
但是,您的代码毫无意义,因为每次调用类方法时都会创建并返回一个新的UIColor对象数组。
这是类别中唯一真正的选项,因为类别无法添加实例变量或全局变量。您可以使用关联存储,但我不确定如何使用类方法中的关联存储。