Search code examples
objective-ccocoansevent

Detecting Ctrl + Return or Ctrl + Enter presses


I find it very hard to find anything official on this matter.

I have a TextView and override the keyDown event and try to detect if the user pressed Ctrl + Enter.

- (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];
    }
}

I have tried different things but nothing worked.

anyone?

(i'm sorry to ask such a trivial question but i have googled for a while now and haven't found anything)


Solution

  • unichar c = [theEvent charactersIgnoringModifiers] characterAtIndex:0];
    
    if(([theEvent modifierFlags] & NSControlKeyMask) && (c == NSCarriageReturnCharacter || c == NSEnterCharacter) {
        // do stuff
    }
    

    Alternatively, you can use the delegate's 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;
    }