8

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

4

2 回答 2

8

我相信 Apple 使用一些私有方法来做到这一点。也许它使用 anNSWindow而不是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 的 Class Reference以获得更多的事件自定义。

于 2011-11-11T12:26:41.660 回答
1

Apple 有一些类似于您需要的示例代码。示例代码使用 NSTextField(它是 NSSearchField 的父类)。希望这可以解决您的问题。

于 2015-02-11T07:21:54.827 回答