独自の自動補完システムを実装しようとしています (結果は sqlite データベースから取得されます)
NSTextField と適切なデリゲートを設定しました。NSTextField のテキストが変更されるたびに、- (void)controlTextDidChange:(NSNotification *)aNotification
メソッドを呼び出します
このメソッドでは、プログラムでメニューを作成し、最後にそのコードで呼び出し/表示します。
NSRect frame = [address frame];
NSPoint menuOrigin = [[address superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height-25)
toView:nil];
NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown
location:menuOrigin
modifierFlags:NSLeftMouseDownMask // 0x100
timestamp:0
windowNumber:[[address window] windowNumber]
context:[[address window] graphicsContext]
eventNumber:0
clickCount:1
pressure:1];
[NSMenu popUpContextMenu:menu withEvent:event forView:address];
address
は私のもので、私NSTextField
のmenu
ものはどこですかNSMenu
。問題は、メニューがフォーカスを取得するため、テキスト フィールドに 1 文字しか入力できず、メニューがファーストレスポンダになったため、テキストを入力できなくなることです。
私の質問は、メニューを表示し、テキスト フィールドをファーストレスポンダーとして保持して、フィールド内のテキストが変更されるたびにメニューがリロードされている間に入力できるようにする方法です。
たとえば、実際にはSafariやChromeのアドレスバーのようにする必要があります。