iphone - 许多 UIButton 的共享操作,获取按钮特定的字符串

标签 iphone design-patterns interface-builder nib iboutlet

我有一个包含许多 UIButtons“汤姆和杰瑞”、“狮子王”等的 View 。我希望​​它们全部在我的 View Controller 中调用相同的操作,然后区分不同的按钮以获得特定于按钮的 NSString(例如“TomJerry”、“LionKing”等标识符)。

想法:

  1. 滥用按钮的标题文本属性(自定义按钮样式、清晰的文本颜色)。
    • 可以,但感觉很脏……(并且只有在按钮不需要显示文本时才有效。)
  2. UIButton 子类,带有额外的 ivar + 属性“context”。
    • 非常适合以编程方式添加按钮,
    • 但是:我的 View 是从 Nib 加载的,因此我必须为每个按钮定义一个导出(并在 awakeFromNib 或 viewDidLoad 中设置其上下文属性)。布莱赫……
  3. 为每个按钮创建一个具有不同“-(NSString*)context”方法实现的子类。
    • 呃……认真的吗? ;-)
  4. 使用标签来标识按钮,并使用字典将标签映射到特定于按钮的字符串。
    • 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/

相关文章:

c# - 应用程序代码中的数据库访问架构

ios - 是否可以仅使用 interfacebuilder 在自动布局中以相同宽度并排对齐 3 个 View ?

view - iOS 8 - Swift - Xcode 6 Beta - 在没有界面生成器的情况下工作(没有 Nib 和 Storyboard)

ios - Xcode UIWebView 不显示 URL 的内容,空白的白色 webview,没有错误

iphone - iPhone应用程序之间如何共享数据

ios - ZBar与iOS7和XCode5编译报错libzbar.a架构

iphone - Storyboard 和 Container View 的疯狂行为

iphone - 转换时的 UITextField 垂直文本对齐

design-patterns - 您使用的是 C++ 中的哪种类型安全枚举?

php - symfony2实体的slugify方法在哪里