【问题标题】:Detect enter key pressed from custom NSTextView completion list检测从自定义 NSTextView 完成列表中按下的输入键
【发布时间】:2017-02-14 13:49:58
【问题描述】:

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

我的界面:

@interface PaddedTextView : NSTextView < NSTextViewDelegate >

我执行:

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

但它永远不会被调用。

当我在选择一个选项后按回车键时,完成列表消失。

我也实现了:

- (void)keyDown:(NSEvent *)event

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

我还实现了 flagsChanged 来捕获 shift 键,这很有效。

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

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

感谢任何帮助。 谢谢

【问题讨论】:

    标签: objective-c macos nstextview


    【解决方案1】:

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

    我在我的 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];
    }
    

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 感谢您的回复,我认为我的问题是我想捕获完成列表上的输入键,而不是真正的 NSTextView 本身。但我不知道那是什么课。我调用 complete:nil 并弹出列表。我认为 TextView 从这个列表接收关键事件,但它自己处理输入键。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-19
      • 2012-03-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多