Cómo lidiar con el primer respondedor y un NSPopover

Estoy tratando de replicar el comportamiento del campo de búsqueda en iTunes, para buscar nombres y símbolos comunes. Específicamente, a medida que comienza a escribir en el campo de búsqueda, aparece una ventana emergente con los elementos filtrados. En su mayor parte, tengo esto funcionando, sin embargo, lo que no puedo replicar es la forma en que maneja el primer respondedor

Aparece mi ventana emergente después de ingresar tres caracteres. En este punto, NSSearchField perdería el estado de primer respondedor y, por lo tanto, ya no podría seguir escribiendo. El comportamiento que me gustaría es la capacidad de continuar escribiendo después de que aparezca la ventana emergente si se desplaza a través de los elementos con las teclas de flecha y luego reanuda la escritura, continuará desde el último carácter en el campo Buscar.

Lo que intenté fue crear una subclase de NSTextView (usar esto como el editor de campo personalizado para NSSearchField) y reemplazar

- (BOOL)resignFirstResponder 

Simplemente devolviendo NO, puedo seguir escribiendo una vez que aparece la ventana emergente, pero obviamente no puedo seleccionar ninguno de los elementos en la ventana emergente. Así que intenté lo siguiente, que devuelve SÍ si se produce la flecha hacia abajo o un evento de reducción del ratón.

@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];
}

Esto funciona para el evento mousedown, pero no para el evento keydown, además, esto no soluciona el problema, cuando el usuario reanuda la escritura.

¿Alguna sugerencia?

Respuestas a la pregunta(1)

Su respuesta a la pregunta