-3

可能重复:
子类 UIButton 添加属性

我正在尝试找到一种扩展 UIButton 的方法,以便它可以具有类似的属性

@property(assign, nonatomic) id userInfos;

没有子类化它......

这可能吗?

button.tag我的情况下还不够......

好的,这里有更好的答案

子类 UIButton 添加属性

4

3 回答 3

2

这很容易使用 Objective-C 关联对象:

在您的标题中:

@interface UIButton (MyCustomProperty)
@property (readwrite, retain, nonatomic) id myCustomProperty;
@end

在您的实现文件中:

#include <objc/runtime.h>

/* Associated objects need a unique memory location to use as a key. */
static char MyCustomPropertyKey = 0;

@implementation UIButton (MyCustomProperty)
/* Use @dynamic to tell the compiler you're handling the accessors yourself. */
@dynamic myCustomProperty;

- (id)myCustomProperty {
    return objc_getAssociatedObject(self, &MyCustomPropertyKey);
}

- (void)setMyCustomProperty: (id)anObject {
    objc_setAssociatedObject(self, &MyCustomPropertyKey, anObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}
@end

就是这样!

于 2013-01-04T21:38:55.360 回答
0

您可以使用 Objective-C 运行时的关联对象函数将一个对象与另一个对象关联:

void objc_setAssociatedObject(id object, void *key, id value, objc_AssociationPolicy 策略)

id objc_getAssociatedObject(id object, void *key)

此外,投票结束。副本:

如何通过类别扩展向 NSMutableArray 添加属性?

为我的所有类添加自定义行为和状态

在许多其他人中。

编辑:

我也同意@Paul.s 对您的问题的评论。将数据附加到按钮听起来很混乱。在不知道您在做什么的情况下,我建议您标记按钮,然后让您的视图控制器处理根据按钮的标签获取您需要的任何数据。

于 2013-01-04T21:38:46.967 回答
0

您想要的是创建一个 UIButton类别。类别被设计为扩展现有类的功能的一种方式。一旦创建了一个设置,您只需要导入该类别,您就可以在它设计的类的任何实例上使用它的功能。

于 2013-01-04T21:41:27.750 回答