3

オートコンプリート付きの単一行の NSTextField があります。テキストを入力し、リターンを押して処理したい。オートコンプリートの提案が必要ない場合は、私が望むことをまったく実行しないことを除けば、ほとんど問題なく動作します。

その場合、何かを入力し、最初に Return キーを押すと、オートコンプリート ドロップダウンが消えます。編集を終了してテキストを処理するには、2 回目のリターン キーを押す必要があります。ドロップダウンを閉じてテキストを処理するためにリターンキーを1回押すだけでよい場合は、それをお勧めします。

ドロップダウンがリターンキーの押下を飲み込んでいるようです。フィールド エディターの keyDown: および insertText: メソッドは、ドロップダウンが表示されたときに英数字キー イベントを認識しますが、ドロップダウンを閉じる最初のリターン キーの押下を登録しません。ドロップダウンが閉じられた後、リターンキーの押下を登録します。

リターン キーを 2 回押す必要がないようにする方法はありますか?

編集:いくつかのコードを追加しました:

#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 を押して、オートコンプリート オプションを表示します。ここで、オートコンプリート オプションを選択せず​​に Return キーを押します。この時点で呼び出されたいのですtextUpdated:が、これを行うにはさらにリターン キーを押す必要があります。

4

0 に答える 0