2012-06-12 37 views

回答

4

你確定需要捕捉關鍵事件嗎?

蘋果在文檔中指出,爲控件擺弄keyDown:是最後的手段,只有在代表圍繞代表的正常Cocoa架構沒有做到您想要的時候才能使用。

如果目的是捕獲按下的輸入按鈕,請注意在文本字段中的此事件會觸發textDidEndEditing委託方法(或者,如果您願意的話)。

因此,如果您在代表NSTextField的代表中執行controlTextDidEndEditing:,則應該能夠對事件做出反應。這個通知(和相關的委託方法)在字段編輯器結束編輯時發送。

如果您希望早一步捕捉事件(在字段編輯器結束編輯之前),您可以實現代理方法control:textView:doCommandBySelector:,該方法可以攔截特定的關鍵事件(如返回鍵)並修改編輯。

一個例子可能是以下幾點:

- (BOOL)control:(NSControl *)control textView:(NSTextView *)fieldEditor doCommandBySelector:(SEL)commandSelector 
{ 
    BOOL retval = NO; 
    if (commandSelector == @selector(insertNewline:)) { 
     retval = YES; // Handled 

     // Do stuff that needs to be done when newLine is pressed 
    } 
    return retval; 
} 

有蘋果的關於它的網站大量的文檔資料,例如介紹here

相關問題