好的,我有这个,但它不起作用:
@interface UILabel (touches)
@property (nonatomic) BOOL isMethodStep;
@end
@implementation UILabel (touches)
-(BOOL)isMethodStep {
return self.isMethodStep;
}
-(void)setIsMethodStep:(BOOL)boolean {
self.isMethodStep = boolean;
}
-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
if(self.isMethodStep){
// set all labels to normal font:
UIFont *toSet = (self.font == [UIFont fontWithName:@"Helvetica" size:16]) ? [UIFont fontWithName:@"Helvetica-Bold" size:16] : [UIFont fontWithName:@"Helvetica" size:16];
id superView = self.superview;
for(id theView in [(UIView *)superView subviews])
if([theView isKindOfClass:[UILabel class]])
[(UILabel *)theView setFont:[UIFont fontWithName:@"Helvetica" size:16]];
self.font = toSet;
}
}
@end
如果我取出 getter 和 setter 方法,那么它不起作用,它告诉我我需要创建一些 getter 和 setter 方法(或使用 @synthesize - 但将 @synthesize 放在 @implementation 中也会引发错误)。但是使用 getter 和 setter 方法我得到一个 EXC_BAD_ACCESS 和一个崩溃。有任何想法吗?谢谢
汤姆
最佳答案
无法通过类别将成员和属性添加到现有类 — 只有方法。
一种可能的解决方法是编写“setter/getter-like”方法,它使用单例来保存变量,这本来是成员。
-(void)setMember:(MyObject *)someObject
{
NSMutableDictionary *dict = [MySingleton sharedRegistry];
[dict setObject:someObject forKey:self];
}
-(MyObject *)member
{
NSMutableDictionary *dict = [MySingleton sharedRegistry];
return [dict objectforKey:self];
}
或者 — 当然 — 编写一个继承自 UILabel 的自定义类
请注意,现在可以在运行时注入(inject)关联对象。 The Objective C Programming Language: Associative References
关于objective-c - 在类别接口(interface)/实现中设置新属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4098753/