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