如何从视图中取消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>) {
    }
}
相关推荐
smartpi_ai1 天前
离线语音识别的“数字变量“限制:为什么不能识别“20.5度“?
人工智能·语音识别·xcode
阿童木写作1 天前
Python批量翻译亚马逊商品图实战教程
开发语言·python·xcode
Lvan的前端笔记1 天前
ios:GitHub Actions云端Xcode26打包上架TestFlight
macos·github·xcode
游戏开发爱好者85 天前
iOS开发IDE有哪些 Xcode 和 快蝎 轻量替代方案
ide·vscode·ios·个人开发·xcode·swift·敏捷流程
胡琦博客6 天前
HarmonyOS 智能工具箱(三):语音交互工具
交互·xcode·harmonyos
布朗克1686 天前
Go 入门到精通-27-泛型编程
开发语言·golang·xcode·泛型编程
鹤卿1238 天前
谓词与正则表达式(OC)
ios·正则表达式·objective-c·xcode
wujf908 天前
Go 内存泄漏排查完整教程 (pprof)
开发语言·golang·xcode
Mh11 天前
程序员和非程序员使用 AI 进行编程的区别究竟在哪里?
前端·javascript·xcode