Cocoa Слушать клавиатуру command+up Event

Я работаю над приложением для macOS и хотел бы обрабатывать локальное событие горячей клавиши (команда + клавиша со стрелкой вверх) в файле NSViewController.

Вот как я это делаю со Swift:

override func keyDown(with event: NSEvent) {

    let modifierkeys = event.modifierFlags.intersection(.deviceIndependentFlagsMask);
    let hasCommand = modifierkeys == .command;

    switch Int(event.keyCode) {
    case kVK_UpArrow where hasCommand:
        print("command up");
        break;
    case kVK_ANSI_B where hasCommand:
        print("command B");
        break;
    default:
        break;
    }
}

Когда я создаю и нажимаю команду + вверх в представлении, консоль ничего не показывает. Но когда я нажимаю команду + B, «команда B» выходит из системы.

Так почему же это не работает для Command+up? Как мне этого добиться?


person hklel    schedule 06.04.2017    source источник


Ответы (1)


Я нашел решение:

self.keyMonitor = NSEvent.addLocalMonitorForEvents(matching: NSEventMask.keyDown, handler: { (event) -> NSEvent? in

    if (event.modifierFlags.contains(.command)){
        if (Int(event.keyCode) == kVK_UpArrow){
            print("command up");
            return nil;
        }
    }

    return event;

});

Ключевым моментом является прерывание события нажатия клавиши и предотвращение его отправки путем возврата nil.

person hklel    schedule 06.04.2017