Objective c NSSearchField结果菜单
我已经搜索了好几个小时,仍然没有找到答案。如何获取Objective c NSSearchField结果菜单,objective-c,macos,cocoa,nssearchfield,Objective C,Macos,Cocoa,Nssearchfield,我已经搜索了好几个小时,仍然没有找到答案。如何获取NSSearchField以显示包含结果的菜单。我可以使用“最近的搜索”菜单显示结果,但如何以编程方式显示菜单?谢谢你的帮助。我相信苹果是通过一些私人方法做到这一点的。可能它使用的是NSWindow而不是NSMenu。一种方法是在NSSearchField代理中实现这一点,假设您有一个指向NSSearchField的IBOutlet - (void)controlTextDidEndEditing: (NSNotification *)aNoti
NSSearchField
以显示包含结果的菜单。我可以使用“最近的搜索”菜单显示结果,但如何以编程方式显示菜单?谢谢你的帮助。我相信苹果是通过一些私人方法做到这一点的。可能它使用的是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
中进一步键入内容。这就是为什么我使用了controltextdidediting:
而不是controlTextDidChange:
。您还应该检查活动的更多定制。苹果的代码与您需要的类似。示例代码使用NSTextField(NSSearchField的父类)。希望这能解决您的问题。谢谢,效果很好。唯一的变化是,我在事件中修改了location参数,将菜单向下移动了大约5,这样它就不会与搜索字段重叠。谢谢我还没有对此进行测试,但也许您可以将整个NSEvent更改为[NSEvent currentEvent]
。也许然后它会得到默认的位置等等。