В конце концов, я изменил способ.
Я использую NSButton для отображения меню и NSTextField для отображения результатов.
![current implementation](https://i.stack.imgur.com/Hecgm.png)
Если кому-то интересны подробности, вот они.
Создайте меню и используйте .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.
}