NSTextField 取得特殊按鍵事件(Enter、Delete、Insert)
Mac程式上使用NSTextField元件時,必需要取消某些特殊按鍵功能時該怎麼處理呢?或是你想要按下Enter時可以全選文字或是檢查內容該怎麼做呢?
NSTextField要取得特殊按鍵事件必需要設定它的Delegate:NSControlTextEditingDelegate
,並且增加Method:
- (BOOL)control:(NSControl *)control textView:(NSTextView *)textView doCommandBySelector:(SEL)commandSelector;
所以在這Delegate中將doCommandBySelector
傳遞的Message給印出來:
//-----------start----------- - (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector { BOOL result = NO; NSLog(@"entered control area = %@", NSStringFromSelector(commandSelector)); return result; } //------------end------------
其中就會看到像下面的事件回報:
2014-04-29 17:31:28.478 NSTextFieldGetKey[99447:303] moveToBeginningOfLine: 2014-04-29 17:31:28.943 NSTextFieldGetKey[99447:303] scrollPageUp: 2014-04-29 17:31:29.360 NSTextFieldGetKey[99447:303] scrollPageDown: 2014-04-29 17:31:30.079 NSTextFieldGetKey[99447:303] moveToEndOfLine: 2014-04-29 17:31:30.994 NSTextFieldGetKey[99447:303] moveRight: 2014-04-29 17:31:31.459 NSTextFieldGetKey[99447:303] moveLeft: 2014-04-29 17:31:31.842 NSTextFieldGetKey[99447:303] moveDown: 2014-04-29 17:31:32.239 NSTextFieldGetKey[99447:303] moveUp: 2014-04-29 17:31:34.162 NSTextFieldGetKey[99447:303] insertNewline: 2014-04-29 17:31:35.304 NSTextFieldGetKey[99447:303] deleteForward: 2014-04-29 17:31:36.160 NSTextFieldGetKey[99447:303] deleteBackward:
假設我們要在按下Enter後做一些處理,可以將程式改成:
//-----------start----------- - (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector { BOOL result = NO; NSLog(@"%@", NSStringFromSelector(commandSelector)); if ( [NSStringFromSelector(commandSelector) isEqualToString:@"insertNewline:"]) { [textView selectAll:self]; result = YES; } return result; } //------------end------------
程式中的insertNewline
代表的就是您按下的Enter
,按下Enter時 全選文字 ,全選文字的Method為selectAll
, 結果像下面圖示:
如果你只是單純的要取消某些按鍵的功能的話,你只要在返回值給YES
就能取消了,像下面程式將Backspace
(deleteBackward:)取消:
//-----------start----------- - (BOOL)control:(NSControl*)control textView:(NSTextView*)textView doCommandBySelector:(SEL)commandSelector { BOOL result = NO; NSLog(@"%@", NSStringFromSelector(commandSelector)); if ( [NSStringFromSelector(commandSelector) isEqualToString:@"deleteBackward:"]) { NSLog(@"deleteBackward to cancel"); result = YES; } return result; } //------------end------------
程式執行結果:
以上為範例程式部分內容的說明,詳細內容請參照範例程式。