如何从视图中取消nspopover?

我正在使用Swift和SwiftUI编写一个MacOS。我对此真的很陌生,但我是一个经验丰富的程序员。

该应用程序是一个带有一个NSPopover的菜单栏应用程序。在AppDelegate中,我包括:

复制代码
self.popover = NSPopover()
self.popover.contentViewController = NSHostingController(rootView: contentView)

复制

contentView中,是否可以包含一个关闭弹出窗口的按钮?

Stack Overflow用户

发布于 2020-09-16 16:59:01

您可以在响应器链中找到NSPopover,然后将其关闭。要实现这一点,您应该为close按钮创建一个协调器:

复制代码
struct CloseButton: NSViewRepresentable {

    class Coordinator: NSObject {
        @objc func click(_ button: NSButton) {
            var responder: NSResponder? = button
            while responder != nil {
                responder = responder?.nextResponder
                if let popover = responder as? NSPopover {
                    popover.close()
                    break
                }
            }
        }
    }

    func makeNSView(context: NSViewRepresentableContext<Self>) -> NSButton {
        NSButton(title: "Close", target: context.coordinator, action: #selector(Coordinator.click(_:)))
    }
    
    func makeCoordinator() -> CloseButton.Coordinator {
        return Coordinator()
    }
    
    func updateNSView(_ nsView: NSButton, context: NSViewRepresentableContext<Self>) {
    }
}
相关推荐
myenjoy_15 小时前
I2S 音频与数字音频接口详解
macos·音视频·xcode
最爱老式锅包肉14 小时前
《HarmonyOS技术精讲-Core Speech Kit(基础语音服务)》第2篇:语音识别核心功能——流式与非流式实现
语音识别·xcode·harmonyos
国服第二切图仔3 天前
HarmonyOS APP《画伴梦工厂》开发第31篇-语音识别实战——SpeechRecognitionEngine+AudioCapturer
语音识别·xcode·harmonyos
秋雨梧桐叶落莳22 天前
iOS——QQ音乐仿写项目总结
学习·macos·ui·ios·mvc·objective-c·xcode
92year1 个月前
Xcode 27 AI Agent 实测:苹果把 Claude、ChatGPT、Gemini 都塞进了 IDE
agent·ai编程·xcode·apple·wwdc
健了个平_241 个月前
iOS 27 适配笔记
ios·xcode·wwdc
邓小乐1 个月前
Workaround: Xcode27 下载iOS 27.0 Simulator
ios·xcode
2601_961194021 个月前
27考研资料|百度网盘|夸克网盘
android·xml·考研·ios·iphone·xcode·webview
大熊猫侯佩1 个月前
WWDC26 前瞻:苹果可能放出的“王炸”,不只是 Siri
xcode·swift·wwdc
pop_xiaoli1 个月前
【iOS】通知传值实现
macos·ios·xcode