3 Stimmen

NSButton Mousedown Ereignis

Ich versuche, ein Popup-Menü anzuzeigen, wenn ich mit der Maus auf eine Schaltfläche klicke. Die Schaltfläche sollte gedrückt erscheinen, wenn die Maus gedrückt wird, und beim Hochziehen der Maus wieder "entriegelt" werden, unabhängig davon, ob einer der Menüpunkte ausgewählt wurde. Ähnlich wie bei der "+"-Schaltfläche des Expose/Space Preference Panels zum Hinzufügen von Anwendungen.

Bislang habe ich 3 Methoden ausprobiert:

  1. Gesendete Aktion, wenn die Schaltfläche angeklickt wird. Aber hier das Pop-up-Menü erscheinen auf Maus nach oben statt Maus nach unten

  2. Unterklasse NSButton und überschreiben mouseDown:. Das Popup-Menü erscheint beim Herunterdrücken der Maus, ich kann einen beliebigen Menüpunkt auswählen. Aber wenn das Popup-Menü verschwunden ist, erscheint die Schaltfläche gedrückt. Daher muss ich noch einmal klicken, um die Schaltfläche "un drücken", bevor ich die gleiche Aktion wieder bekommen kann.

  3. NSEvent addLocalMonitorForEventsMatchingMask. Ähnliches Verhalten wie bei 2.

Haben Sie einen Vorschlag? Ich denke, Methode 2 oder 3 ist der richtige Weg, müssen nur "un drücken" die Taste auf Maus nach oben.

13voto

UJey Punkte 1382

Ein ziemlich altes Thema. Aber es ist das Problem, das ich vor kurzem konfrontiert, so dass, wenn ich bin erlaubt, einen Beitrag zu leisten...

In meinem Fall war die Verwendung von NSPopupButton keine Option. Denn NSPopupButton erstellt ein eigenes NSMenu, das ich nicht brauche (und ich weiß nicht, wie man es verschwinden lassen kann).

Und ich habe einen anderen Weg gefunden. Es gibt eine Möglichkeit, das Standardverhalten von NSButton zu ändern, ohne ihn zu subclassen. Verwenden Sie einfach -sendActionOn: Methode der NSControl-Klasse (irgendwo in -awakeFromNib ):

[_myButton sendActionOn:NSEventMaskLeftMouseDown];

Jetzt wird die Aktion der Schaltfläche beim Ereignis mouseDown gesendet. Ich hoffe, das hilft.

4voto

Joshua Nozzi Punkte 60200

Wie Peter erwähnte, können Sie einen NSPopUpButton verwenden. Was nicht offensichtlich ist, ist, dass Sie den Stil, das Bild, den Titel usw. der Schaltfläche genauso konfigurieren können, wie Sie es mit einem NSButton können.

3voto

bjarnet3 Punkte 31

Schnell "Syntax"

myButton.sendAction(on: .leftMouseDown)

Alternativ dazu:

Unterklasse NSButton:

class ButtonDown: NSButton {
    override func awakeFromNib() {
        super.awakeFromNib()

        self.sendAction(on: .leftMouseDown)
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X