Cha*_*bot 3 subclass objective-c uicolor ios
我正在尝试将UIColor子类化,我似乎无法弄清楚什么是错的.
在我的PColor.h中
#import <Foundation/Foundation.h>
@interface PColor : UIColor {
BOOL isAvailable;
int colorId;
}
@property (nonatomic, assign) BOOL isAvailable;
@property (nonatomic, assign) int colorId;
@end
Run Code Online (Sandbox Code Playgroud)
......在我的PColor.m中
#import "PColor.h"
@implementation PColor
@synthesize isAvailable;
@synthesize colorId;
@end
Run Code Online (Sandbox Code Playgroud)
在实例化PColor对象时,我得到:
//warning: incompatible Objective-C types initializing 'struct UIColor *', expected 'struct PColor *'
PColor *pcolor = [[PColor alloc] initWithHue:1 saturation:0 brightness:0 alpha:1];
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?提前致谢.
UIColor是类集群使用类别中的关联引用来添加属性!UIColor返回的所有自定义init方法UIColor*都不是,id所以你不能轻易地子类,UIColor也不应该尝试.
的UIColor + PCOLOR.h
#import <UIKit/UIKit.h>
#import <objc/runtime.h>
@interface UIColor(PCOLOR)
//Properties prefixed to try and avoid future conflicts
@property (nonatomic, assign) BOOL pIsAvailable;
@property (nonatomic, assign) int pColorId;
@end
Run Code Online (Sandbox Code Playgroud)
的UIColor + PCOLOR.h
#import "UIColor+PCOLOR.h"
@implementation UIColor(PCOLOR)
static char PCOLOR_ISAVAILABLE_KEY;
static char PCOLOR_COLORID_KEY;
@dynamic pIsAvailable, pColorId;
-(void)setPIsAvailable:(BOOL)pIsAvailable
{
objc_setAssociatedObject(self, &PCOLOR_ISAVAILABLE_KEY, [NSNumber numberWithBool:pIsAvailable], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(BOOL)pIsAvailable
{
return [(NSNumber*)objc_getAssociatedObject(self, &PCOLOR_ISAVAILABLE_KEY) boolValue];
}
-(void)setPColorId:(int)pColorId
{
objc_setAssociatedObject(self, &PCOLOR_COLORID_KEY, [NSNumber numberWithInt:pColorId], OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
-(int)pColorId
{
return [(NSNumber*)objc_getAssociatedObject(self, &PCOLOR_COLORID_KEY) intValue];
}
@end
Run Code Online (Sandbox Code Playgroud)
用法
UIColor *pcolor = [[UIColor alloc] initWithHue:1 saturation:0 brightness:0 alpha:1];
pcolor.pColorId = 2352;
pcolor.pIsAvailable = YES;
NSLog(@"\nClass: %@\nColor ID: %d\nIs Availabled: %@",
NSStringFromClass([pcolor class]),
pcolor.pColorId,
pcolor.pIsAvailable ? @"YES" : @"NO");
[pcolor release];
Run Code Online (Sandbox Code Playgroud)
大多数开发人员不需要子类化UIColor.如果您需要支持其他颜色空间或颜色模型,那么唯一可能需要这样做的时间.
你应该使用Category.例如:
@interface UIColor (PColor)
- (BOOL) isAvailable;
- (int) colorId;
@end
Run Code Online (Sandbox Code Playgroud)
在实现文件中:
@implementation UIColor (PColor)
- (BOOL)isAvailable {
// do what you want to do
// return your BOOL
}
- (int)colorId {
// do what you want to do
// return id of color
}
@end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2052 次 |
| 最近记录: |