2

この件に関して公式なものを見つけるのは非常に難しいと思います。

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

私はさまざまなことを試しましたが、何もうまくいきませんでした。

誰でも?

(そのような些細な質問をして申し訳ありませんが、私はしばらくの間グーグルで検索しましたが、何も見つかりませんでした)

4

2 に答える 2

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;
}
于 2011-09-09T12:01:26.297 に答える
1

をオーバーライドする代わりに、テキストビューで-を入力したときに送信されるキーボードアクション(改行を挿入)を-keyDown:オーバーライドできます。ctrlreturn

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

    if(_delegate)
    {
        …
    }
}
于 2011-09-09T12:01:05.077 に答える