我有一个包含许多 UIButtons “Tom and Jerry”、“The Lion King”等的视图。我希望它们都在我的视图控制器中调用相同的操作,然后区分不同的按钮以获得一个按钮-特定的 NSString(例如“TomJerry”、“LionKing”等标识符)。
想法:
- 滥用按钮的标题文本属性(自定义按钮样式、明文颜色)。
- 可以,但感觉很脏……(只有在按钮不需要显示文本时才有效。)
- 子类 UIButton具有额外的 ivar + 属性“上下文”。
- 非常适合以编程方式添加按钮,
- 但是:我的视图是从 Nib 加载的,所以我必须为每个按钮定义一个插座(并在 awakeFromNib 或 viewDidLoad 中设置其上下文属性)。呜呜……</li>
- 使用不同的“-(NSString*)context”方法实现
为每个按钮创建一个子类。
- 呃……说真的?;-)
- 使用标签来识别按钮,并使用字典将标签映射到特定于按钮的字符串。
- DRY 违规:标签需要知道/指定两次——在 Nib 中识别按钮,在字典中检索相应的字符串。
- 到目前为止,我一直避免使用标签。也许这是一个开始的好机会?
如何最好地实现这一目标?任何想法、最佳实践、实施模式?
更新:在阅读了第一个答案(谢谢!)之后,我相信我应该添加一些要点来澄清。
以上所有方法都应该有效;关键是,我并不特别喜欢其中任何一个。我在问你你会喜欢哪种方法(以及为什么),或者是否有其他更好的方法。
进一步的“要求”:
- 我不想将每个按钮都连接为插座。
- 我想以通用方式检索特定于按钮的字符串,即没有打开动作发送者à la
if (sender==self.button1) {…} else if (sender==self.button2) {…}