2009-06-27 5 views
0

J'essaie de mettre en place des onglets rudimentaires dans un éditeur de Cocoa sur lequel je travaille. J'utilise un NSSegmentedControl et j'y ajoute des segments sous forme d'onglets. J'utilise une sous-classe personnalisée NSSegmentedCell pour les onglets afin de dessiner une petite icône en forme de «x» à côté du texte pour fermer les onglets et jusqu'à présent, tout s'est bien passé.Evénements souris pour une sous-classe NSSegmentedCell?

Cependant, je n'arrive pas à comprendre comment traiter réellement les événements de la souris pour les onglets afin de vérifier si quelqu'un a survolé (ou cliqué) l'icône «x». J'ai essayé de redéfinir "mouseMoved" dans ma sous-classe NSSegmentedControl, mais pour une raison étrange, il cesse d'être appelé quand je lui ajoute un nouveau segment (je mets "setAcceptsMouseMovedEvents" à yes dans awakeFromNib, dois-je aussi le mettre ailleurs?). NSSegmentedCells, étant sous-classes NSCell semblent ne pas avoir de traitement des événements de la souris, à part le suivi de la souris, qui ne se déclenche que lorsque le contrôle est cliqué.

Donc la question est, comment pourrais-je traiter correctement les événements de la souris, soit dans le NSSegmentedControl ou dans la sous-classe NSSegmentedCell?

+0

Je serais intéressé par le code que vous utilisez pour dessiner NSSegmentedCell. Cela vous dérangerait-il de le partager? –

+0

Voilà. C'est un peu hacky parce que l'état de surbrillance pour le bouton de fermeture est en fait réglé dans le contrôleur, mais cela fonctionne: http://nopaste.com/p/aAde6sZw4 – toastie

Répondre

2

Jetez un coup d'œil à NSTrackingArea. Vous pouvez ajouter une zone de suivi à votre NSSegmentedControl et obtenir des événements saisis par la souris pour mettre le bouton de fermeture en surbrillance. En ce qui concerne l'obtention des événements de clic, il vaut probablement mieux utiliser une sous-classe distincte NSActionCell pour le bouton de fermeture et y effectuer quelques tests de hit.

Questions connexes