在 xcode 7 中使用 Mac 应用程序预配置的菜单项

Using Mac App preconfigured menu items in xcode 7

我正在编写一些简单的 Mac 应用程序以了解有关各种 cocoa 编程主题的更多信息,虽然 adding/removing 和编写新菜单项似乎很简单,但我无法理解大量 select 预配置菜单项以及如何正确使用它们。 (仅供学习体验)。

例如,Mac 应用程序基于 OS X,Cocoa 应用程序模板 Xcode 7.x 中已经有一个相当完整的菜单到位。但是你如何使用它呢? App->About 菜单项会显示关于框,Quit 会退出应用程序,但是其他的怎么用呢?

我认为它与响应链和当前上下文有关,但我不确定。

我尝试使用文本字段进行试验,发现我可以更改 selected 文本的字体颜色并在属性检查器中 "Allows Rich text" 选项被 selected 时使用取消划线.颜色选择器可以从应用程序的菜单中激活,果然,它会改变文本颜色。但是代码在哪里?它怎么知道我已经 select 编辑了一些文本?其他几个菜单项也可用,但其他菜单项被禁用。例如,我不能 select 粗体或斜体。

抱歉,如果这个问题很长,但我无法找到任何关于这些预配置菜单项如何工作的明确解释。

如果有任何影响,我正在使用故事板。

正如您所说,这个问题相当广泛,要获得完整的治疗,需要的不仅仅是 SO 答案。但我会尝试给出一些提示(我不是故事板专家,但我认为它是一样的)。

所有菜单条目的工作方式相同。当您单击它时,会触发一个动作(一个带有目标的方法)。您可以在 IB 的连接检查器窗格中看到它。

可以将操作定向到特定目标,如 viewController 或通用目标,如 First Responder (== nil)。使用后一种方法,消息调用将通过应用程序跟随响应者链,直到找到响应者(或 none)。

正如您所注意到的,一些菜单选项已经可以使用,例如放弃。那是因为它们预先连接了一个动作(Exit 发送 terminate: 给 First Responder)。然后这个方法在项目提供的App脚手架的某处实现,例如terminate:是由位于响应链末端的NSApplication单例实现的。

要使其他菜单选项按照您希望的方式工作,请找出它们的预定义操作,例如 Copy 发送 copy: 到 First Responder。然后在响应者链中的对象中实现该操作方法。为了进行测试,将它们放在链末端的 App 委托中。

如果您需要不同 windows 的特定行为,例如打印,请在每个 window 控制器中放置一个 print: 方法。响应者链中的第一个将捕获命令,您将获得不同的行为,具体取决于哪个 window 位于顶部。