Como lidar com o socorrista e um NSPopover

Estou tentando replicar o comportamento do campo de pesquisa no iTunes para procurar símbolos e nomes de ações. Especificamente, quando você começa a digitar no campo de pesquisa, aparece um popover com os itens filtrados. Na maioria das vezes, eu tenho esse trabalho, no entanto, o que não consigo replicar é a maneira como ele lida com o socorrista

Minha popover é exibida após a inserção de três caracteres. Nesse ponto, o NSSearchField perderia o status de socorrista e, portanto, não poderia mais continuar digitando. O comportamento que eu gostaria é a capacidade de continuar digitando depois que o popover aparecer, se percorrer os itens com as teclas de seta e, em seguida, retomar a digitação, você continuará do último caractere no campo Pesquisar.

O que eu tentei é subclassificar NSTextView (use isso como o editor de campo personalizado para o NSSearchField) e substituir

- (BOOL)resignFirstResponder 

Simplesmente retornando NÃO, posso continuar digitando assim que o popover aparecer, mas obviamente não consigo selecionar nenhum dos itens no popover. Então, tentei o seguinte, que retorna SIM se ocorrer a seta para baixo ou um evento de redução do mouse.

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

Isso funciona para o evento mousedown, mas não para o evento keydown; além disso, isso não soluciona o problema quando o usuário retoma a digitação.

Alguma sugestão?

questionAnswers(1)

yourAnswerToTheQuestion