将字符串作为标记或按钮中的其他值传递

时间:2014-11-24 07:39:01

标签: ios objective-c uibutton

我需要使用按钮传递字符串数据,比如标签,我该怎么办?

[button setTag:tg];

tg是nsstring。也许使用其他财产而不是标签?

2 个答案:

答案 0 :(得分:5)

使用Associated Objects

@interface UIButton (Tagged)

 @property (nonatomic, copy) NSString *tag;

@end

#import <objc/runtime.h> 

static const void *tagKey = &tagKey;

@implementation UIButton (Tagged)

- (void)setTag:(NSSting *)tag
{
   objc_setAssociatedObject(self, tagKey, tag, OBJC_ASSOCIATION_COPY_NONATOMIC);
}

- (NSString *)tag
{
  return objc_getAssociatedObject(self, tagKey);
}
@end

获取参考associated-objectslink

答案 1 :(得分:0)

你不能将NSString变量设置为整数属性,在Objective-C中是不可能的(如果它是一个对象,技术上你可以,但你在这里处理一个原语)。

您可以在Objective-C运行时中使用关联的属性。您可以使用此API将任何其他变量设置为任何对象,然后在以后检索它。有关详细信息,请参阅以下链接。

http://oleb.net/blog/2011/05/faking-ivars-in-objc-categories-with-associative-references/

方法objc_setAssociatedObject是您正在寻找的方法。