Domanda

Ho un'interfaccia openGL GUI e ho bisogno di avere un menu a comparsa che verrà chiamato quando si preme questo tasto in un certo mio display OpenGL. Voglio visualizzare un menu simile a quello che si apre quando si preme un NSPopUPButton ma non è possibile utilizzare il pulsante di cacao in sé. Sembra che il modo migliore per farlo è quello di utilizzare il NSPopupButtonCell. Non riesco a postare il mio codice qui perché sto scrivendo il codice in Lisp e l'accesso al cacao attraverso un ponte di obiettivo C, ma volevo solo vedere se il seguente codice pseduo sembra che dovrebbe visualizzare il menu o se c'è un difetto evidente nel mio logica:

• 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.

Nessuno di questi metodi erano riusciti a ottenere qualsiasi tipo di menu da visualizzare. C'è qualche altro modo per far apparire modo pianificato il menu contenuto nella cella?

È stato utile?

Soluzione

Penso che si sta cercando il metodo trackMouse:inRect:ofView:untilMouseUp: di NSCell

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

Altri suggerimenti

Credo che sarebbe meglio utilizzare un NSMenu pianura e chiamando +[NSMenu popUpContextMenu:withEvent:forView:]. Se stai rivolte solo il 10,6 e più tardi, si potrebbe anche verificare -[NSMenu popUpMenuPositioningItem:atLocation:inView:], che vi dà un po 'più di controllo sul posizionamento del menu. Basta implementare mouseDown: nella vista, costruire un menu (o caricarlo da un file NIB), e visualizzarlo, e NSMenu dovrebbe prendersi cura di tutti i dettagli da lì. Basta fare in modo che l'obiettivo e l'azione per ogni NSMenuItem è impostato in modo che il metodo di azione viene chiamato correttamente quando si seleziona una voce.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top