Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Macos 拦截选项关闭_Macos_Cocoa - Fatal编程技术网

Macos 拦截选项关闭

Macos 拦截选项关闭,macos,cocoa,Macos,Cocoa,通常情况下,在option键关闭的情况下关闭窗口会关闭应用程序中的所有窗口。在我的应用程序中,我希望它只关闭与用户正在关闭的窗口相关的窗口。我该怎么做?我可以为我的所有窗口实现windowShouldClose,但我如何知道用户单击了哪个窗口?您可以看到,在这样处理的事件中,选项键是否被按下: ([[NSApp currentEvent]modifierFlags]&NSAlternateKeyMask)=0 如果这是对用户单击窗口的关闭按钮的响应,那么您可以找到像这样单击的窗口:[[NSApp

通常情况下,在option键关闭的情况下关闭窗口会关闭应用程序中的所有窗口。在我的应用程序中,我希望它只关闭与用户正在关闭的窗口相关的窗口。我该怎么做?我可以为我的所有窗口实现windowShouldClose,但我如何知道用户单击了哪个窗口?

您可以看到,在这样处理的事件中,选项键是否被按下:

([[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-我编辑了答案以包含菜单项的大小写。