NSSearchField结果菜单

时间:2011-11-11 03:43:51

标签: objective-c macos cocoa nssearchfield

我一直在寻找几个小时但仍未找到答案。如何让NSSearchField显示带有结果的菜单。我可以使用最近的搜索菜单来显示结果,但如何以编程方式显示菜单?谢谢你的帮助。

2 个答案:

答案 0 :(得分:6)

我相信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's Class Reference以获得更多自定义事件。

答案 1 :(得分:1)

Apple的some sample代码类似于您的需要。示例代码使用NSTextField(NSSearchField的父类)。希望这能解决您的问题。