3

NSEventがキーボードの「Shift」キーに応答するかどうか疑問に思いました。アプリのデバッグ時にkeyCodesをログに記録していますが、ShiftキーのkeyCode値を取得していません。

ありがとう、

ケビン

編集:これは私がユーザーの応答から使用しているコードです。

-(void)keyDown:(NSEvent*)event
{   

    if ([event modifierFlags] == NSShiftKeyMask) {
        NSLog(@"Shift key pressed");
    }
}

Shiftキーはまだ認識されていません...

4

5 に答える 5

15

flagsChanged:の方法を見てみましょうNSResponder

このようなもの:

- (void) flagsChanged:(NSEvent *) event {
    if ([event modifierFlags] & NSShiftKeyMask) {
        //Do something
    }
}
于 2011-01-09T21:02:03.780 に答える
9

はビットマスクであるため、コードサンプルは機能していません。-modifierFlagsしたがって、マスクが等しいかどうかのテストは機能しNSShiftKeyMaskません。ANDフラグが設定されているかどうかをテストするには、ビット演算子を使用する必要があります。

if ([event modifierFlags] & NSShiftKeyMask) {
    NSLog(@"Shift key pressed");
}

また、この結果をに保存する場合はBOOL、次のように0に等しくないことを確認する必要があります。

BOOL shiftKeyPressed = ([event modifierFlags] & NSShiftKeyMask) != 0;

これを省略すると、は次のBOOLように評価されます(ビットマスクから引き出す値が1である場合を除き、これは;NOとして定義されます。これは、マスクがで始まるため発生しません)。YES-modifierFlags1 << 16

于 2011-01-09T23:27:52.733 に答える
3

これを使用して、変更されたフラグをキャプチャします。

- (void)flagsChanged:(NSEvent *)event
{

}
于 2011-08-22T19:42:30.800 に答える
3

修飾キーの変更を検出するための私の解決策は次のとおりです。

- (void)keyboard:(AMKeyboardView *)keyboard flagsChanged:(NSEvent *)event {
    if ((event.modifierFlags & NSShiftKeyMask) && !lastShiftState) {
        lastShiftState = true;
        //Shift pressed - do something
    }
    else if (!(event.modifierFlags & NSShiftKeyMask) && lastShiftState) {
        lastShiftState = false;
        //Shift released - do something
    }

    else if ((event.modifierFlags & NSFunctionKeyMask) && !lastFnState) {
        lastFnState = true;
        //Fn pressed - do something
    }
    else if (!(event.modifierFlags & NSFunctionKeyMask) && lastFnState) {
        lastFnState = false;
        //Fn released - do something
    }

    else if ((event.modifierFlags & NSControlKeyMask) && !lastControlState) {
        lastControlState = true;
        //Control pressed - do something
    }
    else if (!(event.modifierFlags & NSControlKeyMask) && lastControlState) {
        lastControlState = false;
        //Control released - do something
    }


    else if ((event.modifierFlags & NSAlternateKeyMask) && !lastOptionState) {
        lastOptionState = true;
        //Option pressed - do something
    }
    else if (!(event.modifierFlags & NSAlternateKeyMask) && lastOptionState) {
        lastOptionState = false;
        //Option released - do something
    }

    else if ((event.modifierFlags & NSCommandKeyMask) && !lastCommandState) {
        lastCommandState = true;
        //Command pressed - do something
    }
    else if (!(event.modifierFlags & NSCommandKeyMask) && lastCommandState) {
        lastCommandState = false;
        //Command released - do something
    }

    else NSLog(@"Other");
}

以前の状態を保存するには4つのインスタンス変数が必要ですが、すべての修飾キーの押下と解放を検出できます。

于 2014-07-29T05:04:08.013 に答える
2

Shiftキーはキー修飾子であるため、キーコードはありません。キーイベントを取得すると、Shiftキーの存在がmodifierFlagsフィールドに表示されます。

于 2011-01-09T18:37:44.817 に答える