我可以在Objective-C中的按钮内存储自定义对象吗?

for*_*yez 2 iphone cocoa cocoa-touch objective-c uikit

在winforms/C#中,大多数UI控件都有.Tag标记,所以像myButton.Tag = myObject; 其中Tag属性是一个'对象'类型,因此您基本上可以存储任何类型的对象.我如何在Objective-C/Cocoa中实现这一目标?所有UI元素都有类似.Tag的东西,我可以存储NSObject或其他东西吗?如果是这样,请你提供一个例子.非常感谢!

注意:我确实在那里看到了整数.Tag,但我想要一个对象标签.但我想这不存在.好吧.

Yuj*_*uji 5

正如Georg所说,您可以使用Objective-C运行时将任何对象关联到另一个对象,因此您可以根据需要将对象关联到控件.

但这并不是标准Cocoa程序的工作原理.相反,在Cocoa中,模型 - 视图 - 控制器模式和委托是标准惯用法,并且不鼓励将对象直接关联到窗口小部件或视图.即使对于一个非常小的程序,您至少会创建一个模型控制器(通常称为Cocoa术语中的应用程序委托)来管理数据,并保持视图由标准控件组成.然后视图和模型控制器通过目标/动作和委托进行交互.

Apple对Cocoa中普遍存在的设计模式进行了非常好的讨论,请参见此处.

通常,当您从一个API(Winforms/C#)移动到另一个API(Cocoa/Objective-C)时,存在一些相似之处,但也存在一些差异.通常值得学习如何在该API中完成任务,而不是试图将您习惯的内容用于新的情况.(为了清楚起见,我不是说哪种API本质上更好;这种讨论是双向的!)

所以,当你遇到这种情况时:

X在API中做A,我知道成语P有效.我现在想X用API 做B.如何P在API中直接实现成语B

我建议你问一下

X在API中做,B我该怎么办?API中的成语是B什么?

代替.