【问题标题】:How do I keep NSMenuItem selected in a NSPopover with NSMenu?如何使用 NSMenu 在 NSPopover 中选择 NSMenuItem?
【发布时间】:2019-04-27 04:53:49
【问题描述】:

我有一个带有内置 NSMenu 的 NSPopUpButton。

但是,当一个 NSMenuItem 被选中时,它会一直返回到第一个项目。

在本例中,我希望选择“Maged”。

有什么想法吗?

相关问题/答案:https://stackoverflow.com/a/53387962/157656

复制:

有人建议这是问题的重复 How do I change/modify the displayed title of an NSPopUpButton

“我希望 NSPopUpButton 显示与所选菜单项的标题不同的标题。”

但是,我的问题是关于让 NSPopUpButton 显示所选项目。

【问题讨论】:

  • NSPopOver 是哪一部分?
  • 对不起,我的意思是 NSPopUpButton
  • 所选项目不是菜单项。
  • 看起来苹果将选中的项目添加到了弹出按钮的菜单中。请参阅语言和地区首选项面板中的地区弹出按钮。

标签: swift xcode macos interface-builder


【解决方案1】:

最后,我改变了我的做法。

我使用 NSButton 来显示菜单和 NSTextField 来显示结果。

如果有人对细节感兴趣,他们在这里。

构建菜单并使用 .representedObject 存储您需要在另一端访问的任何内容。我使用了一个带有名称和代码的结构。

您需要将 NSMenu 分配给 NSButton.menu

然后点击一下,类似这样。

@IBAction func changeVoiceClicked(_ sender: NSButton)
{
    if let event = NSApplication.shared.currentEvent {
        NSMenu.popUpContextMenu(sender.menu!, with: event, for: sender)
    }
}

你的 NSMenuItem 应该有一个动作,它使用选择器指向一个函数。

类似这样的:

@objc func voiceChanged(sender: NSMenuItem)
{
    // cope will nil
    var voice : VoiceDetail = VoiceDetail();

    if (sender.representedObject != nil) {
        voice = sender.representedObject as! VoiceDetail;
    }

    // Do what you need to on menu select.
    // update text field.
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-11-21
    • 2011-10-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-04-08
    • 1970-01-01
    相关资源
    最近更新 更多