# 前言
一般來說,用戶會通電點擊 x 按鈕來關閉

- 但有些場景,比如登錄頁需要在登錄成功時關閉,這是應該怎么辦呢?
# 解決
網上一般會說這種方案:(不建議使用)
class BaseWindowController: NSWindowController {
...
@objc func terminateWindow(notification: NSNotification) {
...
NSApp.terminate(self)
}
...
}
- 使用 NSApp.terminate(self) 確實吧當前 WIndowController 關了,但是把其他的 WindowController 也關了
- 用戶登錄成功 app 直接退出?不太合適,所以我有開始了探索
# NSWindowController :: close()
我閱讀了下 WindowController 的借口,發現其中有一個 close 方法,我們稍加替換,吧 NSApp 換成我們的 WindowController 本身看看效果
class BaseWindowController: NSWindowController {
...
@objc func terminateWindow(notification: NSNotification) {
...
close()
}
...
}
- 完美關閉登陸頁~ 且其他頁面照常運行~ 但這個的方法,前提是得獲得當前 WIndowController 實體,所以得在單例中、ViewController 中或者做全域的 WindowController 管理?太麻煩了
- 而且這個方法畢竟不是官方推薦的,就像手動呼叫 ViewController 的 layoutSubViews 一樣,感覺不穩,所以我要找個穩妥的方法給大家
# 推薦 NSView :: window :: close
有沒有一個辦法,能直接在 view 上,把它的 WindowController 關了呢?我幫他家搜尋了一番,終于找到了正解
extension LoginViewController {
@objc func onSucceed(notification: NSNotification) {
...
NSView().window?.close()
...
}
@objc func onFailed(notification: NSNotification) {
/// TODO:
}
}
- 直接對當前 View 所在 window 執行 close 方法就可以啦,系統會幫我們進行后續的操作
- 注意這里要分 NSWindowControoler、NSViewController 和 NSView ,具體在使用分別幫大家總結一個吧
# 總結
- 幫大家總結一下
- NSWindowController :: 我們直接使用 self.window.close() 就可以啦
- NSViewController :: 我們需要通過 self.view.window.close() 來關閉
- NSView :: 我們直接使用 self.window.close() 就可以啦
- 好多人私聊我“ 27 歲沒文憑能不能轉行程式員?” 我花了好大勁做了期視頻科普下
- 但是播放量好滴,觀眾老爺們幫我看看原因 27 歲沒文憑能不能轉行程式員? 😭

轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/301311.html
標籤:其他
