gpt4 book ai didi

swift - 如何在 NSMenuItems 的自定义 View 中弹出 NSMenu?

转载 作者:行者123 更新时间:2023-11-30 11:42:50 25 4
gpt4 key购买 nike

我有一个带有自定义 View 的 NSMenu,就像这样。

ViewController.swift

class ViewController: NSViewController {

@IBOutlet var theMenu: NSMenu!
@IBOutlet var theMenuItem: NSMenuItem!
@IBOutlet var customView: NSView!

override func viewDidLoad() {
theMenuItem.view = customView
}

@IBAction func showTheMenuWithCustomView(_ sender: NSButton) {
// Popup the menu below button
let position = NSPoint(x: 0, y: sender.frame.height+2)
theMenu.popUp(positioning: nil, at: position, in: sender)
}

}

这很有效。

但是在自定义 View 中,我需要弹出另一个菜单。我调用 popUp 方法后,它什么也不显示。这是代码:

CustomView.swift

class CustomView: NSView {

@IBAction func showCustomViewMenu(_ sender: NSButton) {
// Create the menu in custom view
let customViewMenu = NSMenu()
// Add a menu item in it
customViewMenu.addItem(withTitle: "no one care", action: nil, keyEquivalent: "")
// Popup the menu below button
let position = NSPoint(x: 0, y: sender.frame.height+2)
customViewMenu.popUp(positioning: nil, at: position, in: sender)
}

}

您可以克隆此项目来测试它:

https://github.com/Caldis/NSMenuQuestion

如何在 NSMenuItems 的自定义 View 中弹出 NSMenu ?

最佳答案

使用此行在 CustomView 上显示附加弹出窗口:

NSMenu.popUpContextMenu(customViewMenu, with: NSApp.currentEvent!, for: sender)

此外,如果您还需要禁用整个 CustomView 上的其他弹出窗口,请覆盖 CustomView 中的 rightMouseDown,如下所示:

class CustomView: NSView {
override func rightMouseDown(with event: NSEvent) {
// Do nothing
}
}

关于swift - 如何在 NSMenuItems 的自定义 View 中弹出 NSMenu?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49159234/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com