如何将元数据附加到视图?

时间:2013-12-12 17:05:52

标签: ios objective-c

有没有办法将一些数据(例如NSString)附加到UIView? (类似于[view setMetadata:@"username"])。

让我解释一下我需要实现的目标。我以编程方式创建了一些UIButtons,可以在触摸时显示用户的个人资料。它们都将触发触摸方法,但是当调用该方法时,我需要知道应该去哪个用户。作为一种解决方法,我可以使用NSDictionary,其中键是数字,并设置视图标签以匹配这些数字,但我想知道是否有更好的方法。

4 个答案:

答案 0 :(得分:3)

您可以向视图添加标记。标签只是一个数字,因此您无法将其用于字符串。您可以使用一个NSDictionary,其中包含您用作标记的数字的字符串数据键。

答案 1 :(得分:2)

如果我更仔细地阅读您的问题,我会建议继承UIButton而不是UIView。无论如何,原则是相同的:子类,然后添加必需的属性,并在必要时,例如在action:方法中,强制转换为子类并检索数据。

由于我们已经在讨论子类化,您实际上可以从示例中添加setMetadata:方法,并使用它来存储idNSDictionary或类似的东西。

答案 2 :(得分:2)

为了完整起见,还有一种方法。您可以使用类别和objc_setAssociatedObject函数向类添加属性。例如,请参阅this tutorial

我个人更喜欢Stephen Johnson's solution

答案 3 :(得分:1)

你给出的建议是完成你想要完成的事情的好方法,但要记住一件事:在iOS中,你经常关注MVC design pattern。在MVC中,视图通常是“哑”对象,它们只负责显示您给予它们的任何信息*。

因此,您可能需要重新设计解决方案,以便视图不会保留信息,而是由了解您的视图和模型的控制器保存。它有时看起来似乎是一个不必要的步骤,但是有很好的理由让分离越来越明显,你的应用程序就越大。

*请注意,该规则的例外是从用户获取信息的输入视图,但即使在这些情况下,控制器也会查询这些视图以获取其信息。