2017-02-01 3 views
0

Je voudrais avoir un NSMenu avec plusieurs NSMenuItem s dedans. Ces articles doivent se comporter comme des NSMenuItem s "normaux", à une exception près: J'aimerais pouvoir dessiner le contenu (c'est-à-dire le "premier plan") de chaque article par moi-même.Façon simple d'implémenter des vues personnalisées NSMenuItem dessinées

qui est:

  • Je voudrais le système d'exploitation pour tirer le clou bleu quand je passe la souris avec la souris, tracez la coche ou tableau de bord (pour signifier « sélectionné »/"partie multi -sélection"). De plus, je voudrais un comportement "normal", c'est-à-dire un comportement souris/clavier intégré au menu.

  • Je voudrais attirer le « contenu » me: Idéalement, je suppose que je dois mettre en œuvre/remplacer une seule méthode drawMenuItem:withCGContext:inRectangle:withTextColor, qui obtient essentiellement l'élément, le CGContext attirer dans le NSRect de l'article, et la couleur du texte qui serait utilisé par Mac OS s'il dessinait l'article lui-même.

Je sais que (suspect très stronlgy) que mon souhait est sans doute trop, mais je serais parfaitement bien avec quelque chose adéquate (par exemple, je pouvais imaginer aller chercher le NSRect de moi-même NSMenuItem, obtenir la couleur en utilisant quelque chose comme [NSColor selectedMenuItemTextColor], et le contexte en utilisant quelque chose comme [NSContext currentContext]). J'ai bien sûr considéré Apple's instruction on this. Cependant, cela empêche le menu de dessiner l'arrière-plan surligné en bleu et la coche. De plus, autant que je puisse voir, je devrais mettre en œuvre, par ex. mouseUp moi-même. Pour résumer: existe-t-il un moyen d'obtenir un menu (presque) entièrement fonctionnel, où je ne personnalise que le contenu où se trouve habituellement le titre de l'élément de menu (peut-être même sans les vues personnalisées)?

+0

Vous ne pouvez pas définir l'image de l'élément de menu? – Willeke

+0

@Willeke J'y ai réfléchi, mais j'étais un peu hésitant car je sais maintenant si c'est à ça que l'image a été conçue à l'origine. De plus, je ne savais pas s'il était facile de changer dynamiquement la couleur de premier plan, en se basant sur l'état "highlight" du 'NSMenuItem'. – phimuemue

Répondre

2

La réponse est: Non

Puisque vous remplacez la vue complète de l'élément de menu que vous êtes responsable du dessin et de gérer les événements.

+0

Votre réponse est probablement vraie. Mais ne pourrait-il pas être que je n'ai peut-être pas besoin d'utiliser une vue personnalisée en premier lieu? J'espérais qu'il y a une technique, peut-être sans une vue personnalisée, pour arriver à ce que je cherche. – phimuemue

+0

Malheureusement, 'NSMenuItem' hérite de' NSObject', donc il n'y a pas d'API liée à la vue (publique) à redéfinir. – vadian

+0

True, et j'ai observé dans le débogueur de hiérarchie de vue qu'un 'NSMenu' avec des éléments plain vanilla ne contient pas de sous-vues pour chaque élément, mais semble dessiner tout dans le' NSView' du menu entier. J'ai donc pensé: "peut-être que je pourrais sous-classer celui-ci ..." – phimuemue