【发布时间】:2019-03-12 02:41:29
【问题描述】:
我的应用中有多个窗口控制器,但我希望只有一些窗口控制器在最后一个窗口关闭后退出应用。
我尝试在AppDelegate.swift 文件中添加applicationShouldTerminateAfterLastWindowClosed(_:):
func applicationShouldTerminateAfterLastWindowClosed(_ sender: NSApplication) -> Bool {
return true
}
但似乎它适用于整个应用程序在最后一个窗口关闭后退出应用程序。
我想实现这个的原因是我的应用程序中的一些转换包括关闭窗口并使用self.view.window!.close()或NSApp.mainWindow!.close()显示一个新窗口,一旦调用这些函数,应用程序立即退出。所以,我不希望applicationShouldTerminateAfterLastWindowClosed(_:) 应用于整个应用程序。
我在调用函数关闭前一个窗口之前尝试使用exampleWindowController.showWindow(self),但它仍然不起作用,它仍然终止了我的应用程序。我还尝试使用NSWindowDelegate中的windowShouldClose(_:)来告诉应用程序在关闭特定窗口控制器的窗口后退出(我可能对如何正确使用此功能有一些误解):
extension exampleWindowController: NSWindowDelegate {
func windowWillClose(_ notification: Notification) {
NSApp.terminate(self)
}
}
但还是什么都没发生……
所以我想问有没有办法做到这一点?
如果没有,那么我问是否有任何方法可以告诉应用程序不要在我以编程方式关闭窗口的特定时间退出?
附:我正在使用 Xcode 10 和 Swift 4.2 Cocoa API
【问题讨论】:
标签: macos cocoa appdelegate xcode10 swift4.2