NSHostingController右键菜单无法激活问题求助
我正在尝试编写某实现方案的macOS版本,按理解,设置NSResponder的menu属性后,右键点击时菜单应自动显示,但尝试以下几种方法均未成功:
- 方法A:为NSHostingController的
view设置menu——右键或Ctrl点击无任何反应。 - 方法B:直接为NSHostingController设置
menu——程序崩溃,报错:Abstract method -[NSResponder setMenu:] called from class _TtGC7SwiftUI19NSHostingControllerGVS_21_ViewModifier_...__. Subclasses must override - 方法C:在NSHostingController或NSView的自定义子类的
rightMouseDown方法中手动调用NSMenu.popup——无任何反应。
以下是我的实现代码:
extension View { func contextMenu(menu: NSMenu) -> some View { modifier(ContextMenuViewModifier(menu: menu)) } } struct ContextMenuViewModifier: ViewModifier { let menu: NSMenu func body(content: Content) -> some View { Interaction_UI( view: { content }, menu: menu ) .fixedSize() } } private struct Interaction_UI<Content: View>: NSViewRepresentable { typealias NSViewType = NSView @ViewBuilder var view: Content let menu: NSMenu func makeNSView(context: Context) -> NSView { let v = NSHostingController(rootView: view) // option A - no effect v.view.menu = menu // option B - crash v.menu = menu return v.view } func updateNSView(_ nsView: NSViewType, context: Context) { // part of option A nsView.menu = menu } }
内容的提问来源于stack exchange,提问作者Cameron Little
相关产品推荐
相关产品推荐

