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.
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.
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With