NSButton Mousedown событие - PullRequest
       10

NSButton Mousedown событие

3 голосов
/ 06 сентября 2010

Я пытаюсь показать всплывающее меню при нажатии кнопки мыши.Кнопка должна отображаться нажатой при наведении курсора мыши и быть «не нажатой» при наведении курсора мыши вверх независимо от того, какой из пунктов меню был выбран.Аналогично кнопке «+» на панели «Expose / Space Preference» кнопка добавления приложения.

Пока что я попробовал 3 способа:

  1. Отправлено действие, когда кнопка нажата.Но здесь всплывающее меню появляется при наведении мыши вверх, а не при нажатии мыши вниз

  2. Подкласс NSButton и перезапись mouseDown :.Всплывающее меню появляется при наведении мыши, я могу выбрать любой пункт меню.Но когда всплывающее меню исчезло, кнопка оказалась нажатой.Поэтому мне нужно нажать еще раз, чтобы «отжать» кнопку, прежде чем я смогу выполнить то же действие снова.

  3. NSEvent addLocalMonitorForEventsMatchingMask.Поведение, подобное 2.

Есть предложения?Я думаю, метод 2 или 3 - правильный путь, просто нужно «отжать» кнопку мыши вверх.

Ответы [ 3 ]

12 голосов
/ 07 марта 2013

Довольно старая нить. Но это проблема, с которой я столкнулся в последнее время, поэтому, если мне позволят внести свой вклад ...

В моем случае использование NSPopupButton было невозможным. Потому что NSPopupButton создает свой собственный NSMenu, который мне не нужен (и я не знаю, как заставить его исчезнуть).

И я нашел другой путь. Существует возможность изменить поведение NSButton по умолчанию без его наследования. Просто используйте -sendActionOn: метод класса NSControl (где-то в -awakeFromNib):

[_myButton sendActionOn:NSEventMaskLeftMouseDown];

Теперь действие от кнопки отправляется на событие mouseDown. Надеюсь, это поможет.

4 голосов
/ 07 сентября 2010

Как упоминал Питер, вы можете использовать кнопку NSPopUpButton. Что не очевидно, так это то, что вы можете настроить стиль кнопки, изображение, заголовок и т. Д. Так же, как вы можете использовать NSButton.

3 голосов
/ 24 января 2018

Swift"Синтаксис"

myButton.sendAction(on: .leftMouseDown)

В качестве альтернативы:

Подкласс NSButton:

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

        self.sendAction(on: .leftMouseDown)
    }
}
...