Swift: щелкните правой / левой кнопкой мыши на NSStatusBar

Я создаю приложение NSStatusBar и хочу вызывать разные функции в зависимости от того, щелкнул ли пользователь по значку влево или вправо.

Вот что у меня есть на данный момент:

let statusItem = NSStatusBar.systemStatusBar().statusItemWithLength(-1)

func applicationDidFinishLaunching(aNotification: NSNotification) {
    let icon = NSImage(named: "statusIcon")
    icon?.setTemplate(true)

    statusItem.image = icon
    statusItem.menu = statusMenu
}

При этом он показывает statusMenu при каждом щелчке. Как отличить события mouseEvents?


person ixany    schedule 05.01.2015    source источник
comment
stackoverflow .com / questions / 38999700 /   -  person BB9z    schedule 03.01.2019
comment
Возможный дубликат Обнаруживать события левого и правого щелчка на NSStatusItem (Swift)   -  person ixany    schedule 03.01.2019


Ответы (1)


Этот фрагмент

func menuSelected (sender:AnyObject) {
  var clickMask: Int = 0
  if let clickEvent = NSApp.currentEvent! {  // see what caused calling of the menu action
    // modifierFlags contains a number with bits set for various modifier keys
    // ControlKeyMask is the enum for the Ctrl key
    // use logical and with the raw values to find if the bit is set in modifierFlags
    clickMask = Int(clickEvent.modifierFlags.rawValue) & Int(NSEventModifierFlags.ControlKeyMask.rawValue)
  }
  if clickMask != 0 { ... } // click with Ctrl pressed
}

из моего кода проверяет наличие Ctrl-щелчка. Это место в методе, который вызывается из такого пункта меню:

let item = NSMenuItem(title: title, action: Selector("menuSelected:"), keyEquivalent: "")
person qwerty_so    schedule 05.01.2015
comment
См. NSEvent.pressedMouseButtons - person qwerty_so; 05.01.2015
comment
Не могли бы вы добавить несколько комментариев к вашему коду? К сожалению, я не понимаю, что там происходит. Я тоже не знаю, где его разместить, так как у меня нет IBAction. - person ixany; 05.01.2015
comment
Я тоже заглянул в NSEvent, но мне не удалось выбраться из этого. Постараюсь еще немного. Я использовал Ctrl-щелчок, чтобы получить разные варианты щелчка для строки состояния. - person qwerty_so; 05.01.2015
comment
Уважаемый Килиан, есть ли для этого решение Swift 3? - person ixany; 27.08.2016
comment
Моя последняя попытка с Swift3 помешала. Я слишком стар, чтобы работать ранним последователем, и буду ждать, пока Swift4 станет зрелым, прежде чем перейти на Swift3. Идите вперед и позвольте этому XCode сделать трансформацию за вас. Прежде чем делать это, сохраните свою работу: - / - person qwerty_so; 27.08.2016