如何从视图中取消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>) {
    }
}
相关推荐
键盘敲没电15 小时前
【IOS】GCD学习
学习·ios·objective-c·xcode
roman_日积跬步-终至千里2 天前
【Go语言基础】基本语法
开发语言·golang·xcode
Daniel_Coder2 天前
Xcode 16.4 + iOS 18 系统运行时崩溃:___cxa_current_primary_exception 符号丢失的原因与解决方案
ios·xcode·ios 18·dyld·libc++abi
LAOning113 天前
xcode 各版本真机调试包下载
ide·macos·xcode
豪冷啊3 天前
iOS UIActivityViewController 组头处理
ios·objective-c·xcode
白总Server3 天前
Golang 依赖注入:构建松耦合架构的关键技术
linux·运维·服务器·macos·架构·golang·xcode
一丝晨光6 天前
Windows搭建Swift语言编译环境?如何构建ObjC语言编译环境?Swift如何引入ObjC框架?Interface Builder的历史?
linux·windows·macos·ios·objective-c·xcode·swift
面壁者LOGIC6 天前
xcode 编译运行错误 Sandbox: rsync(29343) deny(1) file-write-create
macos·xcode
面壁者LOGIC6 天前
xcode卡死问题,无论打开什么程序xcode总是在转菊花,重启电脑,卸载重装都不行
macos·xcode
龙之吻7 天前
iOS 使用CocoaPods 添加Alamofire 提示错误的问题
ios·xcode·cocoapods