在 winforms/C# 中,大多数 UI 控件都有一个 .Tag 标签,就像 myButton.Tag = myObject;其中 Tag 属性是“对象”类型,因此您基本上可以存储任何类型的对象。我如何在 Objective-C/Cocoa 中实现这一点?所有 UI 元素都有类似 .Tag 之类的东西,我可以在其中存储 NSObject 或其他东西吗?如果是这样,您能举个例子吗?非常感谢!
注意:我确实在那里看到了整数 .Tag,但我想要一个对象标签。但我想那是不存在的。呵呵,好吧。
最佳答案
正如 Georg 所说,您可以使用 Objective-C 运行时将任何对象关联到另一个对象,因此如果您确实需要,您可以将一个对象关联到一个控件。
但这并不是标准 Cocoa 程序的真正工作方式。相反,在 Cocoa 中,模型- View - Controller 模式和委托(delegate)是标准习惯用法,并且不鼓励将对象直接关联到小部件或 View 。即使对于非常小的程序,您至少也会创建一个模型 Controller (在 Cocoa 术语中通常称为应用程序委托(delegate))来管理数据,并保持由标准控件组成的 View 不变。然后 View 和模型 Controller 通过目标/操作和委托(delegate)进行交互。
Apple 对 Cocoa 中流行的设计模式进行了非常好的讨论,请参阅 here .
一般来说,当您从一个 API(Winforms/C#)迁移到另一个 API(Cocoa/Objective-C)时,既有一些相似之处,也有一些差异。通常值得学习的是如何在该 API 中完成工作,而不是试图将您习惯的内容硬塞到新情况中。 (需要明确的是,我并不是说哪个 API 本质上更好;这个讨论是双向的!)
所以,当你遇到这种情况时:
要在 API A
中执行 X
,我知道习惯用法 P
有效。我现在想在 API B
中执行 X
。如何在 API B
中直接实现惯用法 P
?
我建议你问
要在 API B
中执行 X
,我该怎么办? API B
中的惯用语是什么?
相反。
关于iphone - 我可以在 Objective-C 的按钮内存储自定义对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2173501/