检测Ctrl + Return或Ctrl + Enter按下

时间:2011-09-09 11:48:18

标签: objective-c cocoa nsevent

我觉得很难找到关于此事的任何官方消息。

我有一个TextView并覆盖keyDown事件并尝试检测用户是否按下 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];
    }
}

我尝试过不同的东西,但没有任何效果。

(我很遗憾地提出这样一个微不足道的问题,但我现在已经搜索了一段时间并且没有找到任何内容)

2 个答案:

答案 0 :(得分:6)

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

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

或者,您可以使用代理人的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 :(得分:1)

而不是覆盖-keyDown:,您可以覆盖在输入 ctrl - return 时发送的keyboard action(插入换行符)文本视图:

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

    if(_delegate)
    {
        …
    }
}