我正在Mac的SwiftUI应用中创建第二个窗口。
这就是我叫第二个窗口的方式。
let window = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)
window.center()
window.setFrameAutosaveName("Add Person")
window.contentView = NSHostingView(rootView: AddPerson())
window.makeKeyAndOrderFront(nil)
这很好。但是,当我尝试关闭该窗口时,该应用程序崩溃了。
我正在打电话,以关闭窗口。
NSApplication.shared.keyWindow?.close()
我认为打开两个窗口存在问题。我的开场电话正确吗?
编辑:创建该窗口时,需要设置window.number
。我该如何设置?我什么都没找到。
答案 0 :(得分:2)
好吧,我不认为这是因为窗口本身(我在Xcode 11.3上测试了您的案例,仅带有简单的文本和按钮内容,并且可以正常工作),但是由于某些内容和/或活动对象(管理器等) )
无论如何,您可以尝试通过操作代替强制关闭(如提供的快照中所示)
NSApp.keyWindow?.performClose(nil)
与单击窗口标题栏上的关闭按钮相同。
更新:作为成员而不是本地变量存储在窗口下方
let window = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)
类似主窗口
class AppDelegate: NSObject, NSApplicationDelegate {
var window: NSWindow! // << default, main window
var window2: NSWindow! // << other window (as example)
... // somewhere below
window2 = NSWindow(contentRect: NSRect(x: 20, y: 20, width: 480, height: 300), styleMask: [.titled, .closable, .miniaturizable, .resizable, .fullSizeContentView], backing: .buffered, defer: false)