Меню результатов NSSearchField
Я искал часы и до сих пор не нашел ответа на это. Как вы можете получить NSSearchField
отобразить меню с результатами. Я могу использовать меню недавних поисков для отображения результатов, но как мне сделать так, чтобы меню отображалось программно? Спасибо за любую помощь.
2 ответа
Я считаю, что Apple делает это с помощью некоторых частных методов. Может быть, он использует NSWindow
вместо NSMenu
, Один из способов сделать это - реализовать это в своем NSSearchField
делегат, если у вас есть IBOutlet
указывая на 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];
}
Обратите внимание, что отображение меню препятствует дальнейшему вводу NSSearchField
, Вот почему я использовал controlTextDidEndEditing:
и не controlTextDidChange:
, Вы должны также проверить Ссылку класса NSEvent для большей настройки события.
У Apple есть пример кода, подобный тому, что вам нужно. Пример кода использует NSTextField (который является родительским классом NSSearchField). Надеюсь, это решит вашу проблему.