5

シナリオ:

ユーザーは、NSDatePickerステッパーを使用せずにテキスト形式で日付を入力しています (OS X 上)。キーボードでリターンを押したときに、コントローラーにメッセージを送信したいと思います。

では、NSTextFieldInterface Builder でアクションをフックするか、コードから設定するだけで、ユーザーが Enter キーを押すと、アクション メッセージがターゲットに送信されます。

日付ピッカーでアクション メッセージとターゲットを設定できますが、アクションを実行できません。日付ピッカーで Enter キーを押しても、アクション メッセージが呼び出されません。

私は何か間違ったことをしていますか、それとも使用しなければならない回避策はありますか? 必要であれば、関連するクラスをサブクラス化することに反対しません。

4

1 に答える 1

6

NSDatePickerは、ReturnキーまたはEnterキーによってトリガーされたキーイベントを処理または転送しません。

解決策は、 NSDatePickerをサブクラス化して、keyDownで目的の動作を取得することです。

#import "datePickerClass.h"

@implementation datePickerClass
- (void)keyDown:(NSEvent *)theEvent{
    unsigned short n = [theEvent keyCode];
    if (n == 36 || n == 76) {
       NSLog(@"Return key or Enter key");
        // do your action
        //
    } else { 
        [super keyDown:theEvent];// normal behavior
    }
}
@end

それでおしまい。

編集:NSCarriageReturnCharacterNSEnterCharacterも使用できます

NSString* const s = [theEvent charactersIgnoringModifiers];
unichar const key = [s characterAtIndex:0];
if (key == NSCarriageReturnCharacter || key == NSEnterCharacter) {
于 2012-05-17T01:22:37.007 に答える