NSSearchField结果菜单



我已经搜索了几个小时,仍然没有找到这个问题的答案。如何让NSSearchField显示带有结果的菜单?我可以使用最近的搜索菜单来显示结果,但是我如何使菜单以编程方式显示?谢谢你的帮助。

我相信苹果通过一些私有方法做到了这一点。也许它用NSWindow而不是NSMenu。一种方法是在你的NSSearchField委托中实现这一点,假设你有一个指向NSSearchFieldIBOutlet

- (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的父类)。

相关内容

  • 没有找到相关文章

最新更新