2011-09-09 90 views
2

我发现很难在这个问题上找到任何官方的东西。检测Ctrl + Return或Ctrl + Enter键

我有一个TextView和覆盖keyDown事件,并尝试检测,当用户按下Ctrl键+输入

- (void)keyDown:(NSEvent *)theEvent 
{ 
    if([theEvent modifierFlags] & NSControlKeyMask && /* how to check if enter is pressed??? */) 
    { 
     NSLog(@"keyDown: ctrl+enter"); 
     if(_delegate) 
     { 
      if([_delegate respondsToSelector:@selector(didSomething:)]) 
      { 
       [_delegate performSelector:@selector(didSomething:) withObject:nil]; 
      } 
     } 
    }else 
    { 
     [super keyDown:theEvent]; 
    } 
} 

我试过不同的东西,但没有任何工作。

有人吗?

(我很抱歉地问这样一个微不足道的问题,但我现在用Google搜索了一会儿,没有发现任何东西)

回答

6
unichar c = [theEvent charactersIgnoringModifiers] characterAtIndex:0]; 

if(([theEvent modifierFlags] & NSControlKeyMask) && (c == NSCarriageReturnCharacter || c == NSEnterCharacter) { 
    // do stuff 
} 

或者,你可以使用DELE:回报在文本视图类型 - 当CTRL指称发送大门的textView:doCommandBySelector:

- (BOOL)textView:(NSTextView *)aTextView doCommandBySelector:(SEL)aSelector { 
    // insertLineBreak: is the method sent when a user presses control-return in a text view 
    if (aSelector == @selector(insertLineBreak:)) { 
      // do stuff 
      return YES; 
     } 
    } 

    return NO; 
} 
1

而是覆盖-keyDown:,你可以覆盖keyboard action(插入换行符)

- (void)insertLineBreak:(id)sender { 
    NSLog(@"ctrl-return"); 

    if(_delegate) 
    { 
     … 
    } 
}