我已经找了好几个小时了,还是没有找到答案。如何让NSSearchField显示带有结果的菜单。我可以使用“最近搜索”菜单来显示结果,但如何以编程方式显示该菜单?谢谢你的帮助。
发布于 2011-11-11 20:26:42
我相信苹果是通过一些私密的方法做到这一点的。也许它使用NSWindow而不是NSMenu。一种方法是在您的NSSearchField委托中实现这一点,假设您有一个指向NSSearchField的IBOutlet。
- (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,了解事件的更多自定义信息。
发布于 2015-02-11 15:21:55
苹果的some sample代码与你需要的代码相似。示例代码使用NSTextField (它是NSSearchField的父类)。希望这能解决你的问题。
https://stackoverflow.com/questions/8089421
复制相似问题