Программное создание экземпляра NSPopUpButtonCell в Cocoa OSX

StackOverflow https://stackoverflow.com/questions/1925737

  •  20-09-2019
  •  | 
  •  

Вопрос

У меня есть графический интерфейс OpenGL, и мне нужно иметь всплывающее меню, которое будет вызываться при нажатии определенной кнопки на моем дисплее OpenGL.Я хочу отобразить меню, похожее на то, которое появляется при нажатии кнопки NSPopUpButton, но я не могу использовать саму кнопку Cocoa.Похоже, что лучший способ добиться этого - использовать NSPopupButtonCell .Я не могу опубликовать свой код здесь, потому что я пишу код на Lisp и получаю доступ к Cocoa через objective C bridge, но я просто хотел посмотреть, похоже ли, что следующий код pseduo должен отображать меню или в моей логике есть очевидный недостаток:

• Pseudo Code for function that is called when button is pressed:
• Initialize an NSPopUpButtonCell Using initTextCell: "test" pullsDown: NO
• allocate an NSMenu using alloc
• add two menu items using addItem:
• set the menu of the popUpButtonCell to be the menu that was just allocated using setMenu:
• Next I tried two methods to try and get the menu to actually be displayed,
  first I tried using drawWithFrame:inView: and when that did not work I also tried 
  using drawBezelWithFrame:inView: eventhough the docs said not to use but I just 
  tried it out of desperation.
• finally, when the draw methods did not work I tried using performClick: on the 
  popupButtonCell to try and simulate the click.

Ни один из этих методов не привел к успешному отображению какого-либо меню.Есть ли какой-то другой способ программно открыть меню, содержащееся в ячейке?

Это было полезно?

Решение

Я думаю, что вы ищете trackMouse:inRect:ofView:untilMouseUp: способ NSCell

[theCell trackMouse:[NSApp currentEvent] inRect:NSZeroRect ofView:theView untilMouseUp:YES];

Другие советы

Я думаю, вам было бы лучше использовать простой NSMenu и зовущий +[NSMenu popUpContextMenu:withEvent:forView:].Если вы ориентируетесь только на версию 10.6 и более поздние версии, вы также можете проверить -[NSMenu popUpMenuPositioningItem:atLocation:inView:], что дает вам немного больше контроля над позиционированием меню.Просто реализуйте mouseDown: на ваш взгляд, создайте меню (или загрузите его из файла nib) и отобразите его, а NSMenu оттуда следует позаботиться обо всех деталях.Просто убедитесь, что цель и действие для каждого NSMenuItem устанавливается таким образом, чтобы метод действия вызывался правильно при выборе элемента.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top