相关疑难解决方法(0)

覆盖活动NSMenu的keydown行为

想知道是否有人可以帮助解决这个问题.

我在系统状态栏中有一个由NSStatusItem托管的NSMenu.

由于各种原因,我想要覆盖NSMenu的默认keydown行为,称为"类型选择".基本上,当菜单处于活动状态时,您按一个键,菜单会突出显示标题中具有匹配前导字符的项目.

我想禁用此行为并定义我自己的一些.

问题?NSMenuDelegate中的keyDown事件没有挂钩.子类化NSMenu是不行的,因为它无论如何都不会从NSResponder继承.所以也没有.

看看NSMenu,NSMenuDelegate,NSMenuItem,没有明确的证据证明NSResponder实际上正在处理驱动默认"类型选择"行为的keyDown事件.

任何见解都将非常感激.如果它没有意义,我很乐意澄清我的问题.

谢谢!

cocoa nsmenu

10
推荐指数
0
解决办法
328
查看次数

NSTextfield + NSMenu和第一响应者

我正在尝试实现自己的自动补全系统(结果是从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是我NSTextFieldmenu我的NSMenu。问题在于菜单是焦点所在,因此您只能在文本字段中键入1个字母,然后再也不能键入文本,因为菜单现在是第一响应者。

我的问题是如何显示菜单并保持文本字段为第一响应者,以便您可以在字段中每次更改文本时重新加载菜单时键入文本。

实际上,它应该像在Safari或chrome地址栏中。

cocoa autocomplete objective-c nsmenu nstextfield

5
推荐指数
1
解决办法
1570
查看次数

标签 统计

cocoa ×2

nsmenu ×2

autocomplete ×1

nstextfield ×1

objective-c ×1