我有一行自动完成的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:
,但它需要再次按下返回键才能实现此目的。