我试图从自定义NSTextView (从NSTextField完成列表)中检测Enter键,但我无法使其正常工作。
我的界面:
@interface PaddedTextView : NSTextView < NSTextViewDelegate >
我实现了:
- (BOOL)textView:(NSTextView *)textView doCommandBySelector (SEL)commandSelector
{
但它从未被调用过。
当我选择一个选项后按enter键时,完成列表消失。
我还实现了:
- (void)keyDown:(NSEvent *)event
它将检测字母数字键事件,但不会检测enter键。
我还实现了flagsChanged来捕获Shift键,这很有效。
我使用的是一个自定义的NSTextField、NSTextFieldCell和NSTextView。
当我选择一个完成条目并按下enter键时,该值将被插入到NSTextField控件中,但我希望在这种情况发生时执行一个操作,但我无法检测到它……
任何帮助都是非常感谢的。谢谢
发布于 2016-10-07 02:34:51
我找到了解决我的问题的办法。(更新:这不起作用)
我在我的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,我无法检测到该关键事件,它只会忽略完成列表。仍然在寻找一个真正的解决方案。
发布于 2016-10-07 00:41:59
我不确定完成列表的实现,但是至少在一个普通的NSTextView上,当按下Enter键时,insertNewline:(id)sender
会被调用。
https://stackoverflow.com/questions/39885449
复制相似问题