2011-09-09 4 views
2

이 문제에 관해 공식적인 답변을 찾기가 매우 어렵습니다.Ctrl + Return 또는 Ctrl + Enter 키 누름 감지

나는 텍스트 뷰를 가지고 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]; 
    } 
} 

나는 다른 것을 시도했지만 아무 것도 효과가 없었습니다.

누구?

당신이 keyboard action이 (줄 바꿈을 삽입) 오버라이드 (override) 수 (나는 그런 사소한 질문 죄송하지만 난 지금 잠시 동안 검색 좀 아무것도 발견하지 않았습니다) 대신 -keyDown:를 오버라이드 (override)의

답변

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

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

    if(_delegate) 
    { 
     … 
    } 
} 
관련 문제