2012-05-14 76 views
4

場景:NSDatePicker操作方法不點火

用戶正進入在其文本形式的NSDatePicker日期沒有步進(在OS X),當他們打回在鍵盤上,我想一個消息發送給控制器。

NSTextField中,我只是在Interface Builder中掛鉤操作,或者將其設置爲代碼,並且當用戶點擊輸入時,操作消息將發送到目標。

日期選取器允許設置一個動作消息和一個目標,但我無法得到要觸發的動作。當我在日期選擇器中輸入時,操作消息不會被調用。

我做錯了什麼,或者是否有我必須使用的解決方法?如果這是需要的,我不會對任何涉及的類進行子類化。

回答

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 

就是這樣。

編輯:你也可以使用NSCarriageReturnCharacterNSEnterCharacter

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

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

+0

也可以使用** NSCarriageReturnCharacter **和** NSEnterCharacter **,我編輯我的答案 – jackjr300