2010-09-06 5 views
2

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

До сих пор я попытался 3 метода:

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

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

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

Любое предложение? Я предполагаю, что метод 2 или 3 - это правильный путь, просто нужно «не нажимать» кнопку мыши.

+1

Почему бы просто не использовать NSPopUpButton? –

ответ

4

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

10

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

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

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

[_myButton sendActionOn:NSLeftMouseDownMask]; 

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

+0

Отлично. Это именно то, что мне нужно. Спасибо! –

+0

'NSPopUpButton' имеет метод' -setMenu: '. Всплывающее окно - лучший способ пойти, потому что он ведет себя как стандартный элемент управления (поскольку он * является стандартным элементом управления). –

1

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

myButton.sendAction(on: .leftMouseDown) 

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

Подкласс NSButton:

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

     self.sendAction(on: .leftMouseDown) 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^