如何从视图中取消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>) {
    }
}
相关推荐
青花瓷13 小时前
C++__XCode工程中Debug版本库向Release版本库的切换
c++·xcode
Rverdoser2 天前
xcode更新完最新版本无法运行调试
xcode
#摩斯先生3 天前
IOS 防截屏实现
ios·xcode
胖虎15 天前
CocoaPods安装步骤详解 - 2024
ios·cocoa·xcode·cocoapods
阿里嘎多8716 天前
GO中的文件操作
开发语言·golang·xcode
lmyuanhang7 天前
ios Framework版本号的问题。
ide·macos·xcode
MrZWCui8 天前
iOS18 取消/适配TabbarController缩放动画
学习·ios·objective-c·xcode·ios18
Narutolxy8 天前
探索开源语音识别的未来:高效利用先进的自动语音识别技术20241030
python·macos·xcode
sysin.org9 天前
Xcode 16.1 (16B40) 发布下载 - Apple 平台 IDE
ide·macos·xcode
zuguorui10 天前
XCode16中c++头文件找不到解决办法
开发语言·c++·xcode·swift