ChrisFreeMan
V2EX  ›  iDev

求助大佬, SwiftUI 在 MacOS 上怎么覆盖鼠标点击关闭窗口事件,为隐藏窗口

By ChrisFreeMan at 2022 年 5 月 15 日 · 4791 次点击

是这样我做了一个 App ,并有状态栏( Status bar Menu )菜单功能, 我点击这个状态栏按钮的时候选择隐藏或者展示主窗口,但是如果主窗口被手动点击 x 关掉就不顶用了,所以我想着覆盖掉关闭窗口为隐藏窗口,求助各位大佬。

我用了 AppDelegate 去构建状态栏菜单,这是我处理显示和隐藏主窗口的代码

    @objc func menuButtonAction(sender: AnyObject){
        if NSApp.isHidden{
            NSApp.unhide(nil)
            NSApp.activate(ignoringOtherApps: true)
        }else{
            NSApp.hide(nil)
        }
      
    }
3 条回复
objectxiang
   1
objectxiang  
   2022 年 5 月 15 日
其实不用,在 AppDelegate 里去 handleReopen 的回调,回调里面把你的主窗口重新显示就行了。
ChrisFreeMan
   2
ChrisFreeMan  
OP
   2022 年 5 月 15 日
问题解决了😵‍💫,翻遍全网居然在知乎上找到了答案, AppDelegate 先继承协议 NSWindowDelegate

func applicationDidFinishLaunching(_ notification: Notification) {
mainWindow = NSApp.windows[0]
mainWindow!.delegate = self
setUpMacMenu()
}

func windowShouldClose(_ sender: NSWindow) -> Bool {
NSApp.hide(nil)
return false
}
ChrisFreeMan
   3
ChrisFreeMan  
OP
   2022 年 5 月 15 日
@objectxiang 刚解决了,谢谢朋友的回复
iOS 开发实用技术导航
NSHipster 中文版
› http://nshipster.cn/
cocos2d 开源 2D 游戏引擎
› http://www.cocos2d-iphone.org/
CocoaPods
› http://cocoapods.org/
Google Analytics for Mobile 统计解决方案
› http://code.google.com/mobile/analytics/
WWDC
› https://developer.apple.com/wwdc/
Design Guides and Resources
› https://developer.apple.com/design/
Transcripts of WWDC sessions
› http://asciiwwdc.com
Cocoa with Love
› http://cocoawithlove.com/
Cocoa Dev Central
› http://cocoadevcentral.com/
NSHipster
› http://nshipster.com/
Style Guides
› Google Objective-C Style Guide
› NYTimes Objective-C Style Guide
Useful Tools and Services
› Charles Web Debugging Proxy
› Smore
© 2026 V2EX · 27ms · 3.9.8.5