UIButton简单子类(需要像标记一样具有NSString属性)

时间:2011-03-30 19:28:01

标签: iphone uibutton subclass

我有一个视图,它有一堆以编程方式创建的UIButton对象(圆角矩形类型),但我需要在其中存储一些信息,标识每个按钮。我对标签做得很好,但数字太大了,我想基本上有另一条信息与每个按钮相关联,这次是一个NSString。顺便说一下,标签是采取的,我不能使用它。什么是最简单/最快捷的方式?我是否需要继承UIButton并将其自己的属性添加到stringTag中?我对obj-c还不是很精通,在某处读到这是一种痛苦。有没有更简单的方法在我的UIButtons中存储额外的字符串?非常感谢您的任何建议。

2 个答案:

答案 0 :(得分:1)

对uibutton进行细分是一种真正的痛苦。由于UIButton是一个抽象类,它们通常不会按预期工作。因此,要创建一个完全正常工作的按钮,您可能必须覆盖相当多的方法来使按钮执行Apple子类所做的所有操作。相反,如果您只需要添加存储空间,则可以使用associative references。您必须#import <objc/runtime.h>才能使用这些功能。

执行此操作的最佳方法是定义字符串常量NSString *const buttonTagName = @"com.youapp.buttonTag";,并将此标记作为键objc_setAssociatedObject(button, buttonTagName, tagForCurrentButton, OBJC_ASSOCIATION_RETAIN);存储。

答案 1 :(得分:0)

我认为添加带有一些id信息的NSString不应该过多地扰乱你的UIButton子类。至少它很容易尝试,我们在这里谈论10行代码。我将一个UIButton子类化并覆盖了initWithFrame方法,并使其正常工作。但这是真的,这是一种痛苦,不要问我为什么这样做:)

相关问题