8

私は何時間も検索してきましたが、これに対する答えはまだ見つかりません。NSSearchField結果のメニューを表示する方法を教えてください。最近の検索メニューを使用して結果を表示できますが、メニューをプログラムで表示するにはどうすればよいですか? 助けてくれてありがとう。

4

2 に答える 2

8

Apple はこれをいくつかのプライベートな方法で行っていると思います。NSWindowの代わりに を使用している可能性がありNSMenuます。NSSearchFieldこれを行う1 つの方法はIBOutletNSSearchField.

- (void)controlTextDidEndEditing: (NSNotification *)aNotification
{
    NSString *searchString = [searchField stringValue];

    NSMenu *menu = [[NSMenu alloc] initWithTitle: @"results"];

    [menu addItemWithTitle: searchString action: @selector(someAction:) keyEquivalent: @""];
    [menu addItemWithTitle: @"someString" action: @selector(someOtherAction:) keyEquivalent: @""];

    NSEvent *event =  [NSEvent otherEventWithType: NSApplicationDefined
                                         location: [searchField frame].origin
                                    modifierFlags: 0
                                        timestamp: 0
                                     windowNumber: [[searchField window] windowNumber]
                                          context: [[searchField window] graphicsContext]
                                          subtype: NSApplicationDefined
                                            data1: 0
                                            data2: 0];

    [NSMenu popUpContextMenu: [menu autorelease] withEvent: event forView: searchField];
}

メニューを表示すると、NSSearchField. そのためcontrolTextDidEndEditing:、 and notを使用しましたcontrolTextDidChange:。イベントの詳細なカスタマイズについては、NSEvent のクラス リファレンスも確認してください。

于 2011-11-11T12:26:41.660 に答える