2009-06-27 18 views
0

Ich versuche, einige rudimentäre Tabs in einem Cocoa-Editor zu implementieren, an dem ich gerade arbeite. Ich benutze ein NSSegmentedControl und füge Segmente als Tabs hinzu. Ich benutze eine benutzerdefinierte NSSegmentedCell-Unterklasse für die Tabs, um ein kleines "x" -Symbol neben dem Text zum Schließen der Tabs zu zeichnen, und bisher lief es ziemlich glatt.Mausereignisse für eine NSSegmentedCell-Unterklasse?

Allerdings kann ich nicht herausfinden, wie man tatsächlich Prozess Mausereignis für die Registerkarten zu überprüfen, ob jemand über moused (oder angeklickt) auf das Symbol ‚x‘. Ich habe versucht, "mouseMoved" in meiner NSSegmentedControl-Unterklasse zu überschreiben, aber aus irgendeinem Grund hört es auf, wenn ich ein neues Segment hinzufüge (ich setze "setAcceptsMouseMovedEvents" auf "ja" in watchFromNib, muss ich es auch woanders setzen ??). NSSegmentedCells, die NSCell-Unterklassen sind, scheinen außer Mausverfolgung keine Mausereignisverarbeitung zu haben, die nur ausgelöst wird, wenn auf das Steuerelement geklickt wird.

Die Frage ist also, wie würde ich richtig Mausereignisse verarbeiten, entweder in den NSSegmentedControl oder in der NSSegmentedCell Unterklasse?

+0

Ich wäre an dem Code interessiert, den Sie zum Zeichnen der NSSegmentedCell verwenden. Würde es dir etwas ausmachen, es zu teilen? –

+0

Hier gehen Sie. Es ist ein bisschen hacky, weil der Höhepunkt-Zustand für die Schließen-Schaltfläche tatsächlich in der Steuerung festgelegt ist, aber es funktioniert: http://nopaste.com/p/aAde6sZw4 – toastie

Antwort

2

Werfen Sie einen Blick auf NSTrackingArea. Sie können einen Tracking-Bereich zu Ihrem NSSegmentedControl hinzufügen und Ereignisse per Mausklick dazu aufrufen, um die Schaltfläche zum Schließen zu markieren.

Um die Klickereignisse zu erhalten, verwenden Sie wahrscheinlich am besten eine separate NSActionCell Unterklasse für die Schließen-Schaltfläche und führen dort einige Treffertests durch.

Verwandte Themen