如何在主窗口关闭时退出Cocoa应用程序?如果没有它,您必须单击应用程序图标并单击菜单中的退出。
答案 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()
}
}
}
}
}