通过吞咽回车停止NSTextField自动完成

时间:2013-10-02 16:00:09

标签: objective-c macos cocoa autocomplete nstextfield

我有一行自动完成的NSTextField。我想键入一些文本并在按下返回时进行处理。它主要工作正常,但如果我不想要任何自动完成建议,它不会完全按照我想要的方式进行。

在这种情况下,我输入内容,第一次按返回时,它会自动完成下拉列表。按第二个返回键完成编辑并处理文本。我更喜欢它,如果它只需要一个返回键按下来关闭下拉菜单并处理文本。

看起来下拉按下返回键按下。字段编辑器的keyDown:和insertText:方法在显示下拉列表时会看到字母数字键事件,但是不会注册第一个返回按键,它会解除下拉列表。在下拉菜单被取消后,他们会注册返回键。

我有什么想法可以避免两次返回键命中的需要吗?

编辑:添加了一些代码:

#import "JWAppDelegate.h"

@interface JWAppDelegate()
@property (readwrite, strong) IBOutlet NSTextField *inputTextField;
@property (readwrite, strong) IBOutlet NSTextField *outputTextField;
@end

@implementation JWAppDelegate


- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    [self.inputTextField setDelegate:self];
}

- (IBAction)textUpdated:(id)sender
{
    [self.outputTextField setStringValue:[@"User typed: " stringByAppendingString:[sender stringValue]]];
}

#pragma mark NSTextFieldDelegate
- (NSArray *)control:(NSControl *)control textView:(NSTextView *)textView completions:(NSArray *)words forPartialWordRange:(NSRange)charRange indexOfSelectedItem:(NSInteger *)index
{
    // Select nothing in the autocomplete list.
    *index = -1;
    return @[@"foobar", @"foobaz", @"fooqaz"];
}

@end

nib文件有一个输入文本字段和一个只读输出文本字段。在输入中键入“hello”而不返回。按Esc以显示自动完成选项。现在按返回而不选择自动完成选项。我希望此时调用textUpdated:,但它需要再次按下返回键才能实现此目的。

0 个答案:

没有答案