1

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

4

2 回答 2

3

我不知道 AppleScriptObjC,但这是你在 Objective-c 中的做法。我相信你可以很容易地转换这些。

基本上你不需要修改任何东西。只需将此方法放在您的应用程序委托中即可。当最后一个窗口关闭时,应用程序会自动调用它,因为它是一个 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: 是你想要的。我只是想表明有很多方法可以完成任务。

恭喜你的第一个应用程序!

于 2013-01-22T04:46:00.643 回答
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找到了这个解决方案

于 2017-01-12T23:42:43.253 回答