如何从视图中取消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>) {
    }
}
相关推荐
闲猫12 小时前
go WEB框架
前端·golang·web·xcode
B.-16 小时前
在 Flutter 中实现文件读写
开发语言·学习·flutter·android studio·xcode
9144062322 天前
xcode打包导出ipa
ide·macos·xcode
小白教程4 天前
Python实现语音识别详细教程【2025】最新教程
python·语音识别·xcode
ChiLi_Lin7 天前
Xcode证书密钥导入
xcode
浏览器爱好者13 天前
如何使用Xcode进行iOS应用开发?
macos·ios·xcode
John_rush14 天前
【iOS自动化】Xcode配置WebDriverAgent
macos·ios·自动化·xcode·ui自动化·webdriveragent·移动端自动化
会飞的爱迪生17 天前
xclode版本
xcode
Bruce_Liuxiaowei21 天前
基于阿里云百炼大模型Sensevoice-1的语音识别与文本保存工具开发
人工智能·阿里云·语音识别·xcode
{⌐■_■}25 天前
【Validator】自定义字段、结构体补充及自定义验证,go案例讲解ReportError和errors.As在其中的使用
开发语言·golang·xcode