は、私はNSTextField、適切なデリゲートを設定した(結果はsqliteのデータベースからプルされる)NSTextfield + NSMenuとファーストレスポンダ
自分autocomplementionシステムを実装しようとしています。 NSTextFieldの変更のテキストが、それはそれは正常に動作し- (void)controlTextDidChange:(NSNotification *)aNotification
方法
を呼び出すたびに、この方法では、私は私がそのコードでそれを表示する/呼び出すprogramtically、最終的にメニューを構築:
address
がある
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];
私のNSTextField
とmenu
は私のNSMenu
です。 問題はメニューにフォーカスが当てられているため、テキストフィールドに1文字しか入力できないため、メニューが最初のレスポンダになったのでもうテキストを入力できなくなります。
私の質問は、メニューを表示し、テキストフィールドを最初のレスポンダとして保持する方法です。フィールド内の各テキストの変更時にメニューがリロードされる間に入力することができます。
実際にはSafariやChromeのアドレスバーに似ているはずです。
私は既にNSMenuを破棄してTableViewビューを使用しています。問題は、私がfirstResponderをTableViewに渡すと、テキストフィールドにもう文字を入力できなくなるということです。解決策は、矢印のみをTableViewに転送し、適切なアクションを実行することです。 – Dimillian