我有一个包含许多 UIButtons“汤姆和杰瑞”、“狮子王”等的 View 。我希望它们全部在我的 View Controller 中调用相同的操作,然后区分不同的按钮以获得特定于按钮的 NSString(例如“TomJerry”、“LionKing”等标识符)。
想法:
- 滥用按钮的标题文本属性(自定义按钮样式、清晰的文本颜色)。
- 可以,但感觉很脏……(并且只有在按钮不需要显示文本时才有效。)
- UIButton 子类,带有额外的 ivar + 属性“context”。
- 非常适合以编程方式添加按钮,
- 但是:我的 View 是从 Nib 加载的,因此我必须为每个按钮定义一个导出(并在 awakeFromNib 或 viewDidLoad 中设置其上下文属性)。布莱赫……
- 为每个按钮创建一个具有不同“-(NSString*)context”方法实现的子类。
- 呃……认真的吗? ;-)
- 使用标签来标识按钮,并使用字典将标签映射到特定于按钮的字符串。
- DRY 违规:标签需要已知/指定两次 - 在 Nib 中识别按钮,在字典中检索相应的字符串。
- 到目前为止,我一直避免使用标签。也许这是一个很好的开始机会?
如何最好地实现这一目标?有什么想法、最佳实践、实现模式吗?
<小时/>更新:阅读第一个答案后(谢谢!),我相信我应该添加一些要点进行澄清。
以上所有方法都应该有效;重点是,我并不特别喜欢其中任何一个。我问您您喜欢哪种方法(以及为什么),或者是否还有其他更好的方法。
进一步的“要求”:
- 我不想将每个按钮都连接为 socket 。
- 我想以通用方式检索特定于按钮的字符串,即不按
if (sender==self.button1) {...} else if (sender==self.button2) 操作发送者) {…}
最佳答案
已添加
一个选项是创建一个 UIButton 类别,添加一个基于标签返回 NSString 的方法。您仍然遇到潜在的标签问题,但标签到字符串的转换(实际的和概念的)都在一个地方。
我相信这满足您最初的和进一步的要求。
<小时/>以前
标签快速且轻便,可以比较两个整数。
您可以轻松创建一个编号方案,将事物清晰地分开:1000-1999 是这种类型的事物,1000-1099 是这个子组,1015 是一个实例,等等。
可以进行数字比较:x.tag > 10000 执行此操作。
显然,这意味着您必须跟踪它,并且您的代码最终可能会难以解析。尽管如此,还是有一些漂亮的优势。
关于iphone - 许多 UIButton 的共享操作,获取按钮特定的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4334466/