检测从自定义NSTextView完成列表中按下的输入键

时间:2016-10-05 23:57:11

标签: objective-c macos nstextview

我正在尝试从自定义NSTextView(来自NSTextField完成列表)中检测回车键,但我无法让它工作。

我的界面:

@interface PaddedTextView : NSTextView < NSTextViewDelegate >

我实施:

- (BOOL)textView:(NSTextView *)textView doCommandBySelector (SEL)commandSelector
    {

但它永远不会被召唤。

选择选项后按Enter键时,完成列表消失。

我也实施了:

- (void)keyDown:(NSEvent *)event

它将检测字母数字键事件,但不会检测回车键。

我也已经实现了flagsChanged来捕获shift键并且可以正常工作。

我正在使用自定义NSTextField,NSTextFieldCell和NSTextView。

当我选择一个完成条目并点击回车键时,该值将被插入到NSTextField控件中,但我想在发生这种情况时执行操作,我无法检测到它...

感谢任何帮助。 感谢

2 个答案:

答案 0 :(得分:0)

我找到了解决问题的方法。 (更新:这不起作用)

我在NSTextView实现中添加了以下内容:

-(void) insertCompletion:(NSString *)word forPartialWordRange:(NSRange)charRange movement:(NSInteger)movement isFinal:(BOOL)flag {
    if(movement == NSReturnTextMovement){
        NSLog(@"Enter key pressed...");
    }
    [super insertCompletion:word forPartialWordRange:charRange movement:movement isFinal:flag];
}

更新:实际上这并不总是有效。仅在选择完成选项时才会调用此函数。如果您键入文本字段并按Enter键我无法检测到该键事件,它只会解除完成列表。仍在寻找真正的解决方案。

答案 1 :(得分:-1)

我不确定完成列表的实现,但至少在正常的NSTextView上,当按下回车键时会调用insertNewline:(id)sender