如何使用swift處理窗口的關閉事件,例如,詢問「您確定要關閉表單嗎?」在Swift中處理窗口的關閉事件
的形式將的情況下被關閉「是」而不是「不再」封閉。顯示消息框對我來說不是問題。
viewWillDisappear()也適用於最小化,但我只需要關閉事件。
謝謝。
如何使用swift處理窗口的關閉事件,例如,詢問「您確定要關閉表單嗎?」在Swift中處理窗口的關閉事件
的形式將的情況下被關閉「是」而不是「不再」封閉。顯示消息框對我來說不是問題。
viewWillDisappear()也適用於最小化,但我只需要關閉事件。
謝謝。
您可以在您的ViewController類中使用NSWindowDelegate
協議。 (見documentation here)
要使類符合協議:
class ViewController: NSObject, NSWindowDelegate
爲了檢測窗口的關閉按鈕被點擊時,使用windowShouldClose:
從DOC:
告知代表用戶試圖關閉窗口[...]
在這種方法中,您可以使用NSAlert來提示用戶是否真的要關閉窗口。
編輯(響應@Mr比爾茲利的評論)
爲了讓您的ViewController委託,使用:
window.delegate = self
哪裏self
是視圖控制器和window
是您正在使用的窗口。你可以把這個放在viewDidLoad:
。
就像上面說的那樣,你應該使ViewController
爲NSWindowDelegate
,但是你應該處理windowWillClose
而不是windowShouldClose
。 windowShouldClose
用於確定窗口是否能夠關閉,而不是窗口實際關閉的事件。
我還發現您需要在viewDidAppear
中設置delegate
,而不是viewDidLoad
。對於我self.view.window
尚未在viewDidLoad
中定義。
override func viewDidAppear() {
self.view.window?.delegate = self
}
self.view.window?.delegate = self do plz? –
將ViewController設置爲ViewController表示的Window的委託。它允許符合NSWindowDelegate協議的ViewController實際上充當代理。 –
Thx。使用viewDidAppear爲我工作。 – VaporwareWolf
我有同樣的查詢也解決了它使用的方法在這裏詳細解釋說:Quit Cocoa App when Window Close using XCode Swift 3
它需要三個步驟:
所添加的代碼應該是這樣的:
class ViewController: NSViewController, NSWindowDelegate {
// ... rest of the code goes here
override func viewDidAppear() {
self.view.window?.delegate = self
}
func windowShouldClose(_ sender: Any) {
NSApplication.shared().terminate(self)
}
}
windowShouldClose是一個委託方法,它返回一個布爾值以確定是否允許窗口關閉。你應該使用windowWillClose。您也不需要在代碼中手動終止應用程序。有一個NSApplicationDelegate方法可以放在AppDelegate中,以便在所有窗口關閉時關閉應用程序。 func applicationShouldTerminateAfterLastWindowClosed(_ sender:NSApplication) - > Bool { return true } –
感謝您的回答。我設置了「類ViewController:NSObject,NSWindowDelegate」並實現了函數windowShouldClose。但它不起作用。我相信我應該爲窗口設置委託屬性,但我不知道如何。 – Evgeniy
要設置從您的視圖控制器委託只是做一些事情:「window.delegate = self」在viewDidLoad(只要你在10.10或更高版本)。您還需要一個參考或IBOutlet到相關窗口。 –