Я искал часы и до сих пор не нашел ответа на этот вопрос. Как заставить 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. Ссылка для дополнительной настройки мероприятия.
person
Jef
schedule
11.11.2011
Спасибо, работает отлично. Единственное изменение заключалось в том, что я изменил параметр местоположения в событии, чтобы сместить меню вниз примерно на 5, чтобы оно не перекрывало поле поиска. Спасибо!
- person edc1591; 13.11.2011
Я не проверял это, но, возможно, вы могли бы изменить всю вещь NSEvent на
[NSEvent currentEvent]
. Возможно, тогда он получит местоположение по умолчанию и т. Д.
- person Jef; 13.11.2011
У Apple есть пример кода, похожего на то, что вам нужно. В примере кода используется NSTextField (который является родительским классом NSSearchField). Надеюсь, это решит вашу проблему.
person
billibala
schedule
11.02.2015