我正在编写一些简单的Mac应用程序以了解有关各种可可编程主题的更多信息,虽然添加/删除和编码新菜单项似乎非常简单,但我无法理解大型选择预先配置的菜单项以及如何正确使用它们。 (仅用于学习经历)。
例如,基于OS X的Mac应用程序,Xcode 7.x中的Cocoa应用程序模板将具有相当完整的菜单。但你怎么用呢? App-> About菜单项将显示about框,Quit将退出app,但你如何使用其他?
我有想法表明它与响应者链和当前背景有关,但我不确定。
我尝试了一个文本字段,发现我可以更改所选文本的字体颜色,如果"允许富文本"在属性检查器中选择了选项。可以从应用程序的菜单激活颜色选择器,当然,它会更改文本颜色。但是代码在哪里以及它如何知道我选择了一些文本?其他几个菜单项也可用,但其他菜单项被禁用。例如,我无法选择粗体或斜体。
很抱歉,如果这是一个很长的问题,但我还没有找到任何关于这些预配置菜单项如何工作的明确解释。
如果有任何影响,我会使用故事板。
答案 0 :(得分:0)
正如您所说,问题相当广泛,完整治疗需要的不仅仅是SO答案。但我会尽量给出一些提示(我不是故事板上的专家,但我认为它是一样的。)
所有菜单条目都相同。单击它时会触发一个操作(一个带有目标的方法)。您可以在IB中的连接检查器窗格中看到它。
可以将操作定向到特定目标(如viewController)或通用目标(如First Responder(== nil))。使用后一种方法,消息调用将跟随响应者链通过应用程序,直到找到响应(或没有)的人。
正如您所指出的,一些菜单选择已经起作用,例如放弃。这是因为它们预先连接了一个动作(退出发送terminate:
给第一响应者)。然后,此方法在项目提供的App脚手架中的某处实现,因为示例terminate:
由响应者链末尾的NSApplication单例实现。
使其他菜单选项以您希望的方式工作,找出他们预定义的操作,例如复制发送copy:
到First Responder。然后在响应者链中的对象中实现该操作方法。为了测试,将它们放在链代表末尾的App委托中。
如果您需要针对不同窗口的特定行为(例如Print),请在每个窗口控制器中放置print:
方法。响应者链中的第一个将捕获命令,您将获得不同的行为,具体取决于哪个窗口位于顶部。