edc1591
edc1591

Reputation: 10182

NSSearchField results menu

I've been searching for hours and still haven't found an answer to this. How can you get an NSSearchField to display a menu with results. I can use the recent searches menu to display results, but how do I make the menu display programmatically? Thanks for any help.

Upvotes: 8

Views: 2642

Answers (2)

billibala
billibala

Reputation: 321

Apple has some sample code similar to what you need. The sample code uses NSTextField (which is a parent class of NSSearchField). Hopefully, this solves your problem.

Upvotes: 1

Jef
Jef

Reputation: 2134

I believe Apple does this with some private methods. Maybe it uses an NSWindow instead of an NSMenu. One way to do it is to implement this in your NSSearchField delegate assuming you have an IBOutlet pointing to the NSSearchField.

- (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];
}

Note that showing a menu prevents further typing in the NSSearchField. That's why I used controlTextDidEndEditing:and not controlTextDidChange:. You should also check NSEvent's Class Reference for more customization of the event.

Upvotes: 8

Related Questions