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

标签 iphone objective-c cocoa cocoa-touch uikit

在 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/

相关文章:

Objective-C 如何从标准输入读取数据并忽略额外(不需要的)字符

macos - 如何使用 gluOrtho2D(像素空间)在 Mac OSX(Snow Leopard)上启动 OpenGL 上下文

cocoa - 如何访问应用程序的共享NSTextView

objective-c - Cocoapods:如何为 3rd 方库创建自己的 pod?

xcode - Mac App Store 应用程序因访问文件系统而被拒绝 - 2.30

iphone - 将图像从 iPhone 中的 UIImage 保存到沙箱

iphone - 将证书导入钥匙串(keychain)访问时出错,错误 : 100013

iOS 应用程序无法在 Testflight Ad Hoc Distribution 上启动

iphone - 如何在iphone sdk中的一个项目中集成两种语言(英语或阿拉伯语)

objective-c - objective-c 中的 block 递归