Меню результатов 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). Надеюсь, это решит вашу проблему.

Другие вопросы по тегам