edc*_*591 6 macos cocoa objective-c nssearchfield
我一直在寻找几个小时,但仍然没有找到答案.如何NSSearchField显示带有结果的菜单?我可以使用最近的搜索菜单来显示结果,但如何以编程方式显示菜单?谢谢你的帮助.
我相信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];
}
Run Code Online (Sandbox Code Playgroud)
请注意,显示菜单会阻止进一步输入NSSearchField.这就是为什么我使用controlTextDidEndEditing:而不是controlTextDidChange:.您还应该检查NSEvent的类参考以获得更多自定义事件.
| 归档时间: |
|
| 查看次数: |
2334 次 |
| 最近记录: |