有没有办法将一些数据(例如NSString)附加到UIView? (类似于[view setMetadata:@"username"]
)。
让我解释一下我需要实现的目标。我以编程方式创建了一些UIButtons,可以在触摸时显示用户的个人资料。它们都将触发触摸方法,但是当调用该方法时,我需要知道应该去哪个用户。作为一种解决方法,我可以使用NSDictionary,其中键是数字,并设置视图标签以匹配这些数字,但我想知道是否有更好的方法。
答案 0 :(得分:3)
您可以向视图添加标记。标签只是一个数字,因此您无法将其用于字符串。您可以使用一个NSDictionary,其中包含您用作标记的数字的字符串数据键。
答案 1 :(得分:2)
如果我更仔细地阅读您的问题,我会建议继承UIButton
而不是UIView
。无论如何,原则是相同的:子类,然后添加必需的属性,并在必要时,例如在action:
方法中,强制转换为子类并检索数据。
由于我们已经在讨论子类化,您实际上可以从示例中添加setMetadata:
方法,并使用它来存储id
或NSDictionary
或类似的东西。
答案 2 :(得分:2)
为了完整起见,还有一种方法。您可以使用类别和objc_setAssociatedObject
函数向类添加属性。例如,请参阅this tutorial。
我个人更喜欢Stephen Johnson's solution。
答案 3 :(得分:1)
你给出的建议是完成你想要完成的事情的好方法,但要记住一件事:在iOS中,你经常关注MVC design pattern。在MVC中,视图通常是“哑”对象,它们只负责显示您给予它们的任何信息*。
因此,您可能需要重新设计解决方案,以便视图不会保留信息,而是由了解您的视图和模型的控制器保存。它有时看起来似乎是一个不必要的步骤,但是有很好的理由让分离越来越明显,你的应用程序就越大。
*请注意,该规则的例外是从用户获取信息的输入视图,但即使在这些情况下,控制器也会查询这些视图以获取其信息。