5

设想:

用户在没有步进器的情况下以文本形式输入日期NSDatePicker(在 OS X 上),当他们在键盘上按回车键时,我希望向控制器发送一条消息。

在一个NSTextField中,我只需在 Interface Builder 中连接动作,或者从代码中设置它,当用户按下回车键时,动作消息就会发送到目标。

日期选择器允许设置动作消息和目标,但我无法触发动作。当我在日期选择器中按 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 回答