Jak radzić sobie z pierwszym ratownikiem i NSPopover

Próbuję odtworzyć zachowanie pola wyszukiwania w iTunes, aby wyszukać symbole giełdowe i nazwy. W szczególności, gdy zaczniesz pisać w polu wyszukiwania, pojawi się popover z filtrowanymi elementami. W większości mam to działa, jednak to, czego nie mogę powielić, to sposób, w jaki obsługuje on pierwszego reagującego

Mój popover pojawia się po wprowadzeniu trzech znaków. W tym momencie pole NSSearchField utraciłoby status pierwszego respondenta i dlatego nie mogłem kontynuować pisania. Zachowanie, które chciałbym, to możliwość kontynuowania pisania po pojawieniu się popovera, jeśli przewijasz elementy za pomocą klawiszy strzałek, a następnie wznawiasz pisanie, kontynuowałbyś od ostatniego znaku w polu wyszukiwania.

Próbowałem podklasy NSTextView (użyj tego jako niestandardowego edytora pól dla NSSearchField) i nadpisując

- (BOOL)resignFirstResponder 

Zwracając NIE, mogę kontynuować pisanie, gdy pojawi się popover, ale oczywiście nie mogę wybrać żadnego z elementów w popover. Wypróbowałem więc następujące polecenie, które zwraca TAK, jeśli wystąpi strzałka w dół lub zdarzenie przeniesienia.

@interface SBCustomFieldEditor ()
{
    BOOL resignFirstRepond;
}
@end

@implementation SBCustomFieldEditor

- (id)initWithFrame:(NSRect)frame
{
    self = [super initWithFrame:frame];
    if (self) {
        // Initialization code here.
        resignFirstRepond = NO;
    }
    return self;
}

- (BOOL)resignFirstResponder
{
    return resignFirstRepond;
}

- (void)keyDown:(NSEvent *)theEvent
{
    if ([theEvent keyCode] == 125) {
        resignFirstRepond = YES;
        [self resignFirstResponder];
    }
    [super keyDown:theEvent];
}

- (void)mouseDown:(NSEvent *)theEvent
{
    resignFirstRepond = YES;
    [self resignFirstResponder];
}

Działa to na zdarzenie mousedown, ale nie na zdarzenie keydown, a ponadto nie rozwiązuje problemu, gdy użytkownik wznawia pisanie.

Jakieś sugestie?

questionAnswers(1)

yourAnswerToTheQuestion