在主窗口关闭时退出Cocoa应用程序?

时间:2010-05-28 02:29:09

标签: objective-c cocoa

如何在主窗口关闭时退出Cocoa应用程序?如果没有它,您必须单击应用程序图标并单击菜单中的退出。

5 个答案:

答案 0 :(得分:26)

您可以实施applicationShouldTerminateAfterLastWindowClosed:以在应用的代表中返回YES。但是在做这个之前我会三思而后行,因为除了像Calculator这样的小型“实用”应用程序之外,它在Mac上非常不寻常,大多数Mac用户都不会欣赏你的应用程序表现得如此奇怪。

答案 1 :(得分:10)

将此代码段添加到您应用的代理:

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

答案 2 :(得分:7)

因为问题主要是关于Cocoa编程而不是特定的 语言(Objective-C),这是Chuck和Steve的Swift版本 回答:

@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

    func applicationShouldTerminateAfterLastWindowClosed(sender: NSApplication) -> Bool {
        return true
    }

    // Your other application delegate methods ...

}

对于 Swift 3 ,将方法定义更改为

func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
    return true
}

答案 3 :(得分:6)

您的主窗口应该有一个IBOutlet。例如:IBOutlet NSWindow * mainWindow;

- (void)awakeFromWindow {
    [mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
    [NSApp terminate:self];
}

如果这不起作用,您应该向NSNotificationCenter添加观察者以获取通知 NSWindowWillCloseNotification 。不要忘记检查正确的窗口是否正在关闭。

答案 4 :(得分:0)

这对我有用。

extension MainWindowController: NSWindowDelegate {
    func windowWillClose(_ notification: Notification) {
        if let window = notification.object as? NSWindow, let controller = window.windowController {

            if window == self.window {

                for window in self.childWindows {

                    print(" Closing \(window)")
                    window.close()

                }

            }
        }
    }
}