Я пытаюсь реализовать свою собственную систему автозаполнения (результат - извлечение из базы данных 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.