Как отличить боковые и колесные кнопки с какао?

#objective-c #macos #cocoa #events

Вопрос:

У меня есть мышь с 5 кнопками. Это левая, правая, колесная и 2 боковые кнопки (назад/вперед). Есть ли какой-нибудь способ проверить, была ли нажата боковая кнопка (например, «назад»)? Я изучаю документацию cocoa о событии мыши. На данный момент я знаю, что есть - (void)otherMouseDown:(NSEvent *)event; метод, который вызывается всякий раз, когда была нажата другая (не правая/левая) кнопка. Но документация ничего не говорит о дополнительной информации о том, какая кнопка на самом деле была нажата. Как это преодолеть?

Комментарии:

1. Вы пробовали это buttonNumber свойство NSEvent ?

2. Также в некоторых случаях кнопки назад/вперед не будут вызывать это событие. Как и в случае с моим Logitech MX Master 3: это зависит от поставщика. otherMouseDown В моем случае срабатывает только нажатие на колесо.

Ответ №1:

-(void)scrollWheel:(NSEvent *)event; метод NSОтветчика и так далее из NSViews

- (void)rightMouseDown:(NSEvent *)event; таким же образом

- (void)otherMouseDown:(NSEvent *)event как вы знаете

но также..

 -(void)someAction:(id)sender 
{
    NSEvent *event = [NSApp currentEvent];
    if (event.type == NSEventTypeLeftMouseUp ||
        event.type == NSEventTypeLeftMouseDown) 
    { 
        if (event.clickCount == 2) {  
            // doubleClick
        }
    } 
    else if (event.type == NSEventTypeOtherMouseDown) 
    {
        if (event.buttonNumber==4) 
        {
            //i think first button is 0, so 5 should be 4.
        }
    }
}
 

В NSEvent.h AppKit есть все, что вам нужно, просто сначала проверьте type событие, а затем выберите buttonNumber и что бы вы ни выбрали