使用红色X按钮退出应用程序?

时间:2013-01-22 01:08:30

标签: xcode macos applescript

我已经制作了我的第一个Mac应用程序,它只有一个窗口,我希望它按下红色按钮时退出。此按钮关闭窗口而不是此刻退出应用程序,我似乎无法找到一种方法来编辑此按钮的行为任何提示?请注意,这是在Xcode 4中,是一个基于Applescript的应用程序。

2 个答案:

答案 0 :(得分:3)

我不知道AppleScriptObjC,但是这里是你如何在objective-c中完成的。我相信你可以很容易地转换它们。

基本上你不需要修改任何东西。只需将此方法放入您的app委托中即可。当最后一个窗口关闭时,应用程序会自动调用它,因为它是NSApplication Delegate方法。还有许多其他NSApplication Delegate方法,所以你应该看看这些方法,看看你还能做些什么。祝你好运。

- (BOOL)applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)theApplication {
    return YES;
}

顺便说一句,替代方法可能是使用NSWindowDelegate方法。您只需将AppDelegate(或任何其他类)设置为窗口的委托......

[[self window] setDelegate:self];

具体来说,您可以使用这些NSWindowDelegate方法中的任何一种来修改红色关闭按钮的行为。例如,你可以按照你的要求在那里发出NSApp的terminate:方法,但你可以在其中做任何事情。

- (BOOL)windowShouldClose:(id)sender

- (void)windowWillClose:(NSNotification *)notification

但是applicationShouldTerminateAfterLastWindowClosed:是你想要的那个。我只想表明有很多方法可以完成任务。

祝贺你的第一个应用程序!

答案 1 :(得分:0)

@ regulus6633提供的答案对我不起作用。 Xcode构建失败。

这是因为,与OP一样,我的Xcode应用程序是“Cocoa-AppleScript”应用程序,AppDelegate是用AppleScript编写的。

所以,解决方案是:

script AppDelegate

--- YOUR OTHER CODE ---

   --- QUIT APP WHEN WINDOW IS CLOSED ---
   on applicationShouldTerminateAfterLastWindowClosed_(sender)
      return true
   end applicationShouldTerminateAfterLastWindowClosed_

end script

我把这个处理程序放在脚本块的末尾,但它可能无关紧要。

我在http://www.macscripter.net/viewtopic.php?pid=117933#p117933

找到了这个解决方案