将方法添加到默认类

时间:2012-11-23 21:10:26

标签: objective-c

我想在UIButton类中添加.owner和.number方法。我需要为每个单独的数字分配一个(int)数字,以便我可以使用数字来分隔按钮。

例如,我可以写buttonName.number = 1buttonName.owner = @"Player1";

我该怎么做呢?

1 个答案:

答案 0 :(得分:2)

做这件事的方法很少。更容易的是子类化UIButton类并根据需要添加属性,可以实现;

@interface MyButton:UIButton
@property(nonatomic, assign) int number;
@property(nonatomic, strong) NSString *owner
@end

另一种方法是使用运行时将属性添加到类中。为此,您将为该类创建一个类别,然后将属性添加到接口中,然后使用运行时为其添加属性;

@interface UIButton(MyCategory)
@property(nonatomic, assign) float number;
@property(nonatomic, strong) NSString *owner;
@end

@implementation UIButton(MYCategory)
NSString *const numberKey = @"kNumberKey";
NSString *const ownerKey = @"kOwnerKey";

 - (float)number{ 
    return [objc_getAssociatedObject(self, &numberKey) floatValue]; 
 } 

-(void)setNumber:(float)num{ 
  objc_setAssociatedObject(self, &numberKey,[NSNumber numberWithFloat:num], OBJC_ASSOCIATION_RETAIN_NONATOMIC); 
}

-(NSString*)owner{
    return objc_getAssociatedObject(self, &ownerKey);
}

-(void)setOwner:(NSString *)own{
    objc_setAssociatedObject(self, &ownerKey, own, OBJC_ASSOCIATION_COPY);
}

@end

通过这种方式,您可以将自定义属性添加到UIButton类本身。