NSDatePicker操作方法未触发

时间:2012-05-14 20:20:32

标签: macos cocoa nsdatepicker

情景:

用户正在以文本形式输入NSDatePicker的日期,没有步进器(在OS X上),当他们点击键盘返回时,我想要一条消息发送到控制器

NSTextField中,我只是将操作挂钩在Interface Builder中,或者从代码中设置,当用户点击进入时,操作消息将被发送到目标。

日期选择器允许设置操作消息和目标,但我无法触发操作。当我在日期选择器中按Enter键时,不会调用操作消息。

我做错了什么,或者我有必要使用的解决方法吗?如果需要的话,我不会对任何涉及的类的子类化产生不利影响。

1 个答案:

答案 0 :(得分:5)

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

就是这样。

编辑:你也可以使用 NSCarriageReturnCharacter NSEnterCharacter

NSString* const s = [theEvent charactersIgnoringModifiers];
unichar const key = [s characterAtIndex:0];
if (key == NSCarriageReturnCharacter || key == NSEnterCharacter) {