[英]Programmatically dismiss modal dialog in MacOS
我有一個來自MacOS應用程序的AppDelegate的警告對話框,需要使用新信息進行更新。 當有新信息可用時,我想以編程方式關閉舊對話框並顯示新對話框。 我嘗試了兩種方式,但都存在問題:
使用alert.runModal()
如果我使用上面的方法,則會根據需要呈現一個模態。 然后,我可以稍后使用lockWarningModal.window.close()
關閉該對話框,它可以使舊對話框消失, 但是它凍結了UI,因此我無法再與之交互。 我猜這是因為alert.runModal()
是同步的,並且主線程仍然被阻塞。 但是,我不知道該如何發布。
使用alert.beginSheetModal(for: NSApplication.shared.windows.last!) { (response) in }
如果我使用上述方法並使用NSApplication.shared.windows.last!.endSheet(alert.window)
關閉對話框,則可以解決UI凍結問題。 但是, 該對話框已附加到主應用程序窗口 ,而未作為模態顯示在最前面。
如何獲得以編程方式可忽略的模式對話框?
您不能通過簡單地關閉其事件窗口來停止模型事件循環(或警報表)。 實際上,使用現代的NSAlert
API,您永遠不必關閉或訂購該窗口-框架會為您處理。
對於以runModal()
開頭的警報,請使用NSApplication
的abortModal()
, stopModal()
或stopModal(withCode:)
。 在runModal()
返回之后,向警報窗口發送orderOut(nil)
將其刪除。
對於隨后執行完成塊的警報表,請使用NSWindow
的endSheet(_)
或endSheet(_:returnCode:)
。 您的完成區塊執行后,警報將自動刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.