【发布时间】:2009-11-20 05:23:26
【问题描述】:
我正在开发一个可可应用程序。我的应用程序最初显示一个弹出表。我需要知道当我们尝试通过右键单击并在停靠栏中的图标上选择“退出”来退出应用程序时触发了哪个事件,因为由于弹出表,我无法退出应用程序。我该如何解决这个问题?
【问题讨论】:
标签: objective-c cocoa macos appleevents
我正在开发一个可可应用程序。我的应用程序最初显示一个弹出表。我需要知道当我们尝试通过右键单击并在停靠栏中的图标上选择“退出”来退出应用程序时触发了哪个事件,因为由于弹出表,我无法退出应用程序。我该如何解决这个问题?
【问题讨论】:
标签: objective-c cocoa macos appleevents
当在 Dock 菜单中选择 Quit 项时,您的应用会收到 quit Apple 事件。如果你想拦截这个,你需要为此事件安装一个自定义的 Apple 事件处理程序。请注意,在工作表被关闭之前,工作表阻止应用程序终止是正常的,因此如果您更改此行为,您的应用程序的工作方式将与其他应用程序不同。
下面是一个简单示例,说明如何在应用程序委托中覆盖 quit Apple 事件的默认处理程序:
- (void)applicationDidFinishLaunching:(NSNotification*)notification
{
//install the custom quit event handler
NSAppleEventManager* appleEventManager = [NSAppleEventManager sharedAppleEventManager];
[appleEventManager setEventHandler:self andSelector:@selector(handleQuitEvent:withReplyEvent:) forEventClass:kCoreEventClass andEventID:kAEQuitApplication];
}
//handler for the quit apple event
- (void)handleQuitEvent:(NSAppleEventDescriptor*)event withReplyEvent:(NSAppleEventDescriptor*)replyEvent
{
[self terminate:self];
}
【讨论】: