我正在尝试实现我自己的自动补全系统(结果是从 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];
address
我的在哪里NSTextField
,menu
是我的NSMenu
。问题是菜单占据了焦点,因此您只能在文本字段中输入 1 个字母,然后您不能再输入文本,因为菜单现在是第一响应者。
我的问题是如何显示菜单并将文本字段保留为第一响应者,以便您可以在该字段中的每次文本更改时重新加载菜单时输入它。
例如,它实际上应该像在 Safari 或 chrome 地址栏中一样。