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) {
看起來既美觀又簡單。由於蘋果在他們的文檔中某處提到在使用'keyDown:'之前在代表,格式化程序或類似程序中尋找解決方案,所以我希望會有另一種解決方案,但至少這個方法很簡單。有一點Google導致了Events.h,其中甚至有官方常量定義爲36和76.該文件中的有用評論指出,Enter鍵的76不能保證在非ANSI鍵盤上工作,所以我認爲我'只需使用可確保在所有鍵盤上都可以工作的kVK_Return。 – Monolo
也可以使用** NSCarriageReturnCharacter **和** NSEnterCharacter **,我編輯我的答案 – jackjr300