关于objective c:当主窗口关闭时,让Cocoa应用程序退出?

Make a Cocoa application quit when the main window is closed?

如何使Cocoa应用程序在主窗口关闭时退出?否则,你必须点击应用程序图标,然后点击菜单中的退出。


您可以实现applicationShouldTerminateAfterLastWindowClosed:以在应用程序的委托中返回yes。但在做这件事之前我会三思而后行,因为在Mac上,除了计算器之类的小型"实用"应用程序之外,这是很不寻常的,而且大多数Mac用户不会欣赏你的应用程序如此奇怪的行为。


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

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


因为问题主要是关于cocoa编程,而不是关于特定的语言(Objective-C),这里是查克和史蒂夫的快速版本答:

1
2
3
4
5
6
7
8
9
10
@NSApplicationMain
class AppDelegate: NSObject, NSApplicationDelegate {

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

    // Your other application delegate methods ...

}

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

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


你的主窗口应该有一个IBoutlet。例如:iboutlet nswindow*主窗口;

1
2
3
4
5
6
- (void)awakeFromWindow {
    [mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
    [NSApp terminate:self];
}

如果这不起作用,您应该在nsnotificationCenter中为通知nswindowwillclosenotification添加一个观察者。别忘了检查一下右窗是否关上了。