我一直在寻找几个小时但仍未找到答案。如何让NSSearchField
显示带有结果的菜单。我可以使用最近的搜索菜单来显示结果,但如何以编程方式显示菜单?谢谢你的帮助。
答案 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的父类)。希望这能解决您的问题。