Macos 拦截选项关闭
通常情况下,在option键关闭的情况下关闭窗口会关闭应用程序中的所有窗口。在我的应用程序中,我希望它只关闭与用户正在关闭的窗口相关的窗口。我该怎么做?我可以为我的所有窗口实现windowShouldClose,但我如何知道用户单击了哪个窗口?您可以看到,在这样处理的事件中,选项键是否被按下:Macos 拦截选项关闭,macos,cocoa,Macos,Cocoa,通常情况下,在option键关闭的情况下关闭窗口会关闭应用程序中的所有窗口。在我的应用程序中,我希望它只关闭与用户正在关闭的窗口相关的窗口。我该怎么做?我可以为我的所有窗口实现windowShouldClose,但我如何知道用户单击了哪个窗口?您可以看到,在这样处理的事件中,选项键是否被按下: ([[NSApp currentEvent]modifierFlags]&NSAlternateKeyMask)=0 如果这是对用户单击窗口的关闭按钮的响应,那么您可以找到像这样单击的窗口:[[NSApp
([[NSApp currentEvent]modifierFlags]&NSAlternateKeyMask)=0
如果这是对用户单击窗口的关闭按钮的响应,那么您可以找到像这样单击的窗口:[[NSApp currentEvent]window]
我想您还应该检查[NSApp currentEvent]
是否是鼠标事件,等等,但这两个测试的组合似乎应该为您提供所需的信息
另一方面,如果这是用户在按住选项键的情况下从“文件”菜单中选择“关闭窗口”命令,则您可以将
performClose:
方法从NSWindow
s默认实现覆盖到您自己的实现中,在调用[超级性能关闭:发件人]
查看NSWindow、NSWindowController和NSWindow的委托。子类化可能会有所帮助。此外,您可能希望在应用程序委托中添加一些内容。还有NSDocument和NSDocumentController,假设您的应用程序是基于文档的。您能更具体一点吗?我不会检查currentEvent
是否是鼠标事件。菜单项m已通过辅助功能工具(如VoiceOver)调用或者通过自定义键盘快捷键。如果菜单项所连接的操作方法已被调用,这就足够了。啊,我假设问题是关于窗口左上角的“关闭”按钮控件本身。我想,单击“关闭窗口”菜单项的选项也有相同的效果。对不起,我对Cocoa不熟悉。我该如何操作是否接受为option Close Window调用的菜单项操作?这是系统提供的,不是我定义的菜单项。我需要在它运行并要求所有其他窗口关闭之前拦截它。@user2802999-我编辑了答案以包含菜单项的大小写。