如何从视图中取消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>) {
    }
}
相关推荐
iOS日常2 天前
iOS设备崩溃日志获取与查看
ios·xcode
iOS日常3 天前
Xcode 垃圾清理
ios·xcode
pop_xiaoli11 天前
effective-Objective-C 第四章阅读笔记
笔记·ios·objective-c·cocoa·xcode
Sheffi6613 天前
AI智能体编程时代的技术架构:Claude Agent与OpenAI Codex在Xcode中的集成原理
人工智能·架构·xcode
桂花很香,旭很美14 天前
[7天实战入门Go语言后端] Day 2:用 Go 写一个 HTTP 服务——net/http 入门
http·golang·xcode
Sheffi6618 天前
Xcode 26.3 AI编程搭档深度解析:如何用自然语言10分钟开发完整iOS应用
ios·ai编程·xcode
Aftery的博客22 天前
Xcode运行报错:SDK does not contain ‘libarclite‘ at the path
macos·cocoa·xcode
风栖柳白杨25 天前
【语音识别】Qwen3-ASR原理及部署
人工智能·python·语音识别·xcode·audiolm
£漫步 云端彡25 天前
Golang学习历程【第九篇 结构体(struct)】
学习·golang·xcode