想知道是否有人可以帮助解决这个问题.
我在系统状态栏中有一个由NSStatusItem托管的NSMenu.
由于各种原因,我想要覆盖NSMenu的默认keydown行为,称为"类型选择".基本上,当菜单处于活动状态时,您按一个键,菜单会突出显示标题中具有匹配前导字符的项目.
我想禁用此行为并定义我自己的一些.
问题?NSMenuDelegate中的keyDown事件没有挂钩.子类化NSMenu是不行的,因为它无论如何都不会从NSResponder继承.所以也没有.
看看NSMenu,NSMenuDelegate,NSMenuItem,没有明确的证据证明NSResponder实际上正在处理驱动默认"类型选择"行为的keyDown事件.
任何见解都将非常感激.如果它没有意义,我很乐意澄清我的问题.
谢谢!
我正在尝试实现自己的自动补全系统(结果是从sqlite数据库中提取的)
我已经设置了NSTextField和适当的委托。每当NSTextField中的文本更改时,它都会调用- (void)controlTextDidChange:(NSNotification *)aNotification方法
它工作正常,在这种方法中,我以编程方式构建菜单,最后使用该代码调用/显示了它:
NSRect frame = [address frame];
NSPoint menuOrigin = [[address superview] convertPoint:NSMakePoint(frame.origin.x, frame.origin.y+frame.size.height-25)
toView:nil];
NSEvent *event = [NSEvent mouseEventWithType:NSLeftMouseDown
location:menuOrigin
modifierFlags:NSLeftMouseDownMask // 0x100
timestamp:0
windowNumber:[[address window] windowNumber]
context:[[address window] graphicsContext]
eventNumber:0
clickCount:1
pressure:1];
[NSMenu popUpContextMenu:menu withEvent:event forView:address];
Run Code Online (Sandbox Code Playgroud)
哪里address是我NSTextField和menu我的NSMenu。问题在于菜单是焦点所在,因此您只能在文本字段中键入1个字母,然后再也不能键入文本,因为菜单现在是第一响应者。
我的问题是如何显示菜单并保持文本字段为第一响应者,以便您可以在字段中每次更改文本时重新加载菜单时键入文本。
实际上,它应该像在Safari或chrome地址栏中。