Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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.

like image 770
edc1591 Avatar asked Nov 11 '11 03:11

edc1591


2 Answers

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.

like image 172
Jef Avatar answered Sep 23 '22 04:09

Jef


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.

like image 23
billibala Avatar answered Sep 23 '22 04:09

billibala