Objective c 是否在主窗口关闭时退出Cocoa应用程序?
如何使Cocoa应用程序在主窗口关闭时退出?否则,您必须单击应用程序图标并在菜单中单击退出。您可以实现Objective c 是否在主窗口关闭时退出Cocoa应用程序?,objective-c,cocoa,Objective C,Cocoa,如何使Cocoa应用程序在主窗口关闭时退出?否则,您必须单击应用程序图标并在菜单中单击退出。您可以实现应用程序应在LastWindowClosed后终止:以在应用程序的委托中返回YES。但在这样做之前,我会三思而后行,因为在Mac电脑上,除了计算器等小型“实用”应用程序之外,这真的很不寻常,大多数Mac用户不会欣赏你的应用程序表现得如此奇怪。你应该在主窗口上安装一个IBOutlet。例如:IBMOutlet NSWindow*主窗口 - (void)awakeFromWindow { [
应用程序应在LastWindowClosed后终止:
以在应用程序的委托中返回YES。但在这样做之前,我会三思而后行,因为在Mac电脑上,除了计算器等小型“实用”应用程序之外,这真的很不寻常,大多数Mac用户不会欣赏你的应用程序表现得如此奇怪。你应该在主窗口上安装一个IBOutlet。例如:IBMOutlet NSWindow*主窗口
- (void)awakeFromWindow {
[mainWindow setDelegate: self];
}
- (void)windowWillClose:(NSNotification *)notification {
[NSApp terminate:self];
}
如果此操作不起作用,则应在NSNotificationCenter中添加一名观察员,用于通知NSWindowWillCloseNotification。别忘了检查右窗口是否关闭。将此代码段添加到应用程序的代理中:
-(BOOL) applicationShouldTerminateAfterLastWindowClosed:(NSApplication *)app {
return YES;
}
因为问题主要是关于Cocoa编程,而不是具体的 语言(Objective-C),这是Chuck和Steve的快速版本 答复: 对于Swift 3将方法定义更改为
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
这对我有用
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()
}
}
}
}
}
尽管这是一个有效的问题,但还是要重新考虑。如果你的应用程序需要其主窗口始终存在,请禁用关闭它的功能。公平地说,我会这样做。非常感谢。我不同意。在大多数单窗口应用程序中,包括计算器和(现在的)系统首选项,您可以关闭窗口,这样做会退出应用程序。我个人也曾使用过相反的应用程序,当我试图关闭主窗口并收到一声蜂鸣而不是我想要的关闭/退出时,我感到很沮丧。事实上,苹果曾经拒绝过我的应用程序,并建议我实现这一点。他们说我需要一个清晰的方法来重新打开主窗口,或者实现“ApplicationsShouldTerminateAfterLastWindowClosed”@nute:是的,应该有一个简单的方法来重新打开窗口。如果你点击图标却什么也没发生的应用程序是不好的。这与说应用程序通常应该在最后一个窗口关闭时退出相去甚远。这并没有解决在主窗口关闭时如何关闭应用程序的问题-这只解决了最后一个窗口关闭时的问题。我添加了这个答案是出于元问题的精神,因为我结束了一个较新的问题,明确要求使用Swift代码作为此问题的副本。Swift 3要求在发件人文本前加下划线和空格。您节省了我的时间和生命!谢谢
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()
}
}
}
}
}