返回uicolors数组的类别

时间:2015-01-05 23:31:07

标签: ios objective-c objective-c-category

我有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]];知道我做错了吗?

2 个答案:

答案 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对象数组。

这是类别中唯一真正的选项,因为类别无法添加实例变量或全局变量。您可以使用关联存储,但我不确定如何使用类方法中的关联存储。