我正在尝试为我制作的简单十六进制编辑器制作GUI。但我无法启用任何默认菜单项(即“打开...”,“保存”等)。无论我做什么,它们总是变灰并且无法点击。
我尝试将“打开...”菜单项链接到第一响应者对象的已接收操作openDocument:
,并创建一个只有一个方法{{1}的新类名FileMenuController.m
我是Xcode,Interface Builder和Objective-C的新手,不知道如何继续。
注意:这不是基于文档的应用程序。
感谢您的帮助!
答案 0 :(得分:7)
你有正确的想法。有两种启用菜单项的方法,如Enabling Menu Items中所述。通过自动启用,系统将检查响应者链,查找为菜单中的每个项目实现操作的对象。如果它找到具有适当操作的响应者,则启用该菜单项。
因此,您已将菜单项与第一个响应者相关联,并且您已在FileMenuController
课程中实施了相同的操作。您需要做的其他事情是:
FileMenuController
继承自NSResponder,以便它可以成为响应者链的一部分FileMenuController
的实例,并确保它是响应者链的一部分。实际上,您可能不希望单独的对象只是为了管理“文件”菜单。相反,您通常会将-openDocument:
操作放在应用程序委托中,因为它始终是响应程序链的一部分,因为打开文档是应用程序所做的事情(而不是像窗口或视图那样) 。同一菜单中的其他命令(如“保存”,“另存为”,“关闭”和“打印”)不是由应用程序委托实现,而是由文档,窗口控制器或管理文档/文件的任何对象实现。这样,Open命令几乎总是被启用(因为app委托几乎总是在响应程序链中),但只有在有可用于处理这些命令的文档时才会启用保存,关闭和打印。
为了完整起见,管理菜单项启用的另一种方法是手动方式,您可以在其中专门设置每个项目的启用/禁用状态。不过,我不认为这是你想要的任务。