NSEvent: тест только для одного modfierkey

Хорошо, я понимаю, как определить из NSEvent, если нажата клавиша-модификатор:

if ([theEvent modifierFlags] & NSAlternateKeyMask) {
        // The Option/Alt key was pressed
    }

Но это также захватывает optionkey и другой modifierkey одновременно, например, Option+Shift или любую комбинацию с optionkey.

Как проверить только optionkey и ничего больше?


person koen    schedule 04.02.2012    source источник


Ответы (2)


Как это:

const NSUInteger kNotAlt = NSAlphaShiftKeyMask | NSShiftKeyMask | NSControlKeyMask | NSCommandKeyMask;
NSUInteger modFlags = [theEvent modifierFlags];
if (((modFlags & NSAlternateKeyMask) != 0) &&
    ((modFlags & kNotAlt) == 0))
{
    // Only alt was pressed
}
person user1118321    schedule 04.02.2012
comment
Спасибо - я сделаю это в категории для NSEvent и добавлю аналогичные методы для других ключей. - person koen; 04.02.2012
comment
Большой! Если это решило вашу проблему, установите зеленый флажок слева! - person user1118321; 05.02.2012

Вы также можете попробовать

NSUInteger modFlags = [theEvent modifierFlags];
if ((modFlags & NSCommandKeyMask) && !(modFlags & ~NSCommandKeyMask))
{
    // Only alt was pressed
}
person Tony    schedule 05.02.2012
comment
Спасибо всем. Тем временем я также нашел другое, более общее решение. Надеюсь, с форматированием все в порядке.‹br/› NSUInteger modifiers = [event modifierFlags] & (NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask);<br/> if (modifiers == NSAlternateKeyMask)<br/>{<br/> // only alt was pressed<br/>} - person koen; 05.02.2012